这篇文章不是在第一次集成shiro的时候编写的,都是后来回忆的,随着对代码的理解和框架的学习,东西也都慢慢的熟悉了。
1.maven的pom.xml中加入shiro依赖
1 2 3 4 5 6
| <dependency> <groupId>org.apache.shiro</groupId> <artifactId>shiro-spring</artifactId> <version>1.2.5</version> </dependency>
|
2.配置数据库
在application.yml中配置数据库连接。
3.添加数据表
用户表、权限表等,根据自己需要。如果不需要很高的要求,可以只有一个用户表,然后只要判断用户用户名密码是否输入正确,就判断其是否有权限进行成功页,等慢慢熟悉之后,再丰富自己的权限设置。可以参考我整理的网上的用户角色和权限数据库设计方案Post not found: Spring Boot用户角色和权限管理 Spring Boot用户角色和权限管理
4.编写页面
登录页、权限页等,根据自己需要。可以只设置一个登录页,然后设置一个登陆成功的页面
5.配置shiro
1)实现一个自己的AuthorizingRealm,重写里面的权限验证doGetAuthorizationInfo和身份验证doGetAuthenticationInfo的方法
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85
| public class MyShiroRealm extends AuthorizingRealm {
@Override protected AuthenticationInfo doGetAuthenticationInfo(AuthenticationToken token) throws AuthenticationException { String username = (String)token.getPrincipal(); UserInfo userInfo = userInfoService.findByUsername(username);
if(userInfo == null){ return null; }
try{ SimpleAuthenticationInfo authenticationInfo = new SimpleAuthenticationInfo( userInfo.getUsername(), userInfo.getPassword(), getName() ); authenticationInfo.setCredentialsSalt(ByteSource.Util.bytes(userInfo.getCredentialsSalt())); return authenticationInfo; }catch (Exception e){ System.out.println("授权失败"); logger.error("doGetAuthenticationInfo",userInfo); return null; }
}
@Override protected AuthorizationInfo doGetAuthorizationInfo(PrincipalCollection principals) {
SimpleAuthorizationInfo authorizationInfo = new SimpleAuthorizationInfo(); String username=(String)principals.getPrimaryPrincipal(); UserInfo userInfo = userInfoService.findByUsername(username);
authorizationInfo.addRole(userInfo.getRoles());
return authorizationInfo; } }
|
2)新建配置类,这里是通过代码进行的权限配置,可以通过配置文件进行文件配置
1 2 3 4 5 6 7 8 9
| @Configuration public class ShiroConfig { @Bean public ShiroFilterFactoryBean shirFilter(SecurityManager securityManager) { System.out.println("ShiroConfiguration.shirFilter()"); ShiroFilterFactoryBean shiroFilterFactoryBean = new ShiroFilterFactoryBean(); shiroFilterFactoryBean.setSecurityManager(securityManager); }
|
说明:这里的shiroFilter、securityManager是必须的,myShiroRealm是自己实现的验证流程,shiroFilter可以使用代码配置,也可以使用从ini文件中读取配置,所有的类配置sessionmanager,cachemanager都以Bean的方式注入到spring boot中,区别与传统的spring的xml配置方式。shirFilter中调用setSecurityManager(),securityManager中注入sesssionManager和realm,以及cacheManager等。
6.实现登录方法
主要代码:
1 2 3 4 5 6 7 8
| public void login(){ Subject currentUser = SecurityUtils.getSubject(); UsernamePasswordToken token = new UsernamePasswordToken(username, password); currentUser.login(token); }
|
如此调用时,会进入到MyShiroRealm中的doGetAuthenticationInfo进行验证。
7.编写shiro.ini文件
主要是url路由的定义,哪些需要访问权限,哪些不需要访问权限等。
1 2 3 4 5 6 7 8 9
| #url=拦截器[参数],拦截器[参数]…… [urls] /static/** = anon /assets/** = anon /pdfjs/** = anon
#先进入authc的拦截器,然后进入自定义的roles拦截器 /**=authc
|
8.配置SessionManager