1000字范文,内容丰富有趣,学习的好帮手!
1000字范文 > Shiro权限框架-Shiro入门(3)

Shiro权限框架-Shiro入门(3)

时间:2022-06-21 22:52:03

相关推荐

Shiro权限框架-Shiro入门(3)

1、身份认证

【1】基本流程

流程如下:

​ 1、Shiro把用户的数据封装成标识token,token一般封装着用户名,密码等信息

​ 2、使用Subject门面获取到封装着用户的数据的标识token

​ 3、Subject把标识token交给SecurityManager,在SecurityManager安全中心中,SecurityManager把标识token委托给认证器Authenticator进行身份验证。认证器的作用一般是用来指定如何验证,它规定本次认证用到哪些Realm

​ 4、认证器Authenticator将传入的标识token,与数据源Realm对比,验证token是否合法

【2】案例演示

【2.1】需求

1、使用shiro完成一个用户的登录

【2.2】实现

【2.2.1】新建项目

shiro-day01-01authenticator

【2.2.2】导入依赖

<?xml version="1.0" encoding="UTF-8"?><project xmlns="/POM/4.0.0" xmlns:xsi="/2001/XMLSchema-instance"xsi:schemaLocation="/POM/4.0.0 /xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><groupId>com.newbies.shiro</groupId><artifactId>shiro-day01-01authenticator</artifactId><version>1.0-SNAPSHOT</version><name>shiro-day01-01authenticator</name><!-- FIXME change it to the projects website --><url></url><properties><project.build.sourceEncoding>UTF-8</project.build.sourceEncoding></properties><dependencies><dependency><groupId>commons-logging</groupId><artifactId>commons-logging</artifactId><version>1.1.3</version></dependency><dependency><groupId>org.apache.shiro</groupId><artifactId>shiro-core</artifactId><version>1.3.2</version></dependency><dependency><groupId>junit</groupId><artifactId>junit</artifactId><version>4.11</version></dependency></dependencies><build><plugins><!-- compiler插件, 设定JDK版本 --><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-compiler-plugin</artifactId><version>3.1</version><configuration><source>8</source><target>8</target><showWarnings>true</showWarnings></configuration></plugin></plugins></build></project>

【2.2.3】编写shiro.ini

#声明用户账号[users]jay=123

【2.2.4】编写HelloShiro

package com.newbies.shiro;import org.apache.shiro.SecurityUtils;import org.apache.shiro.authc.UsernamePasswordToken;import org.apache.shiro.config.IniSecurityManagerFactory;import org.apache.shiro.mgt.SecurityManager;import org.apache.shiro.subject.Subject;import org.apache.shiro.util.Factory;import org.junit.Test;/*** @Description:shiro的第一个例子*/public class HelloShiro {@Testpublic void shiroLogin() {//导入权限ini文件构建权限工厂Factory<SecurityManager> factory = new IniSecurityManagerFactory("classpath:shiro.ini");//工厂构建安全管理器SecurityManager securityManager = factory.getInstance();//使用SecurityUtils工具生效安全管理器SecurityUtils.setSecurityManager(securityManager);//使用SecurityUtils工具获得主体Subject subject = SecurityUtils.getSubject();//构建账号tokenUsernamePasswordToken usernamePasswordToken = new UsernamePasswordToken("jay", "123");//登录操作subject.login(usernamePasswordToken);System.out.println("是否登录成功:" + subject.isAuthenticated());}}

【2.2.4】测试

【2.3】小结

1、权限定义:ini文件2、加载过程:导入权限ini文件构建权限工厂工厂构建安全管理器使用SecurityUtils工具生效安全管理器使用SecurityUtils工具获得主体使构建账号token用SecurityUtils工具获得主体构建账号token登录操作

2、Realm

【1】Realm接口

所以,一般在真实的项目中,我们不会直接实现Realm接口,我们一般的情况就是直接继承AuthorizingRealm,能够继承到认证与授权功能。它需要强制重写两个方法

public class DefinitionRealm extends AuthorizingRealm {/*** @Description 认证* @param authcToken token对象* @return */public abstract AuthenticationInfo doGetAuthenticationInfo(AuthenticationToken authcToken) {return null;}/*** @Description 鉴权* @param principals 令牌* @return*/public abstract AuthorizationInfo doGetAuthorizationInfo(PrincipalCollection principals){return null;}}

【2】自定义Realm

【2.1】需求

1、自定义Realm,取得密码用于比较

【2.2】实现

【2.2.1】创建项目

shiro-day01-02realm

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。