SpringBoot整合Shiro的环境搭建教程
世界尽头与你 人气:0SpringBoot整合Shiro环境搭建
导入 SpringBoot 和 Shiro 整合包的依赖:
<!-- https://mvnrepository.com/artifact/org.apache.shiro/shiro-spring --> <dependency> <groupId>org.apache.shiro</groupId> <artifactId>shiro-spring</artifactId> <version>1.10.1</version> </dependency>
下面是编写配置文件:
@Configuration public class ShiroConfig { }
Shiro 三大要素
- subject -> ShiroFilterFactoryBean
- securityManager -> DefaultWebSecurityManager
- realm
实际操作中对象创建的顺序 : realm -> securityManager -> subject
第一步:编写自定义的 realm ,需要继承 AuthorizingRealm,并且重写认证和授权方法:
public class UserRealm extends AuthorizingRealm { @Override protected AuthorizationInfo doGetAuthorizationInfo(PrincipalCollection principalCollection) { System.out.println("执行了授权方法"); return null; } @Override protected AuthenticationInfo doGetAuthenticationInfo(AuthenticationToken authenticationToken) throws AuthenticationException { System.out.println("执行了认证方法"); return null; } }
注册我们自己的realm到配置类里:
@Configuration public class ShiroConfig { @Bean public UserRealm userRealm(){ return new UserRealm(); } }
第二步:创建 securityManager,并加载realm:
@Bean(name = "SecurityManager") public DefaultWebSecurityManager getDefaultWebSecurity(@Qualifier("userRealm") UserRealm userRealm) { DefaultWebSecurityManager securityManager = new DefaultWebSecurityManager(); // 需要关联自定义的 Realm,通过参数把 Realm 对象传递过来 securityManager.setRealm(userRealm); return securityManager; }
第三步:创建 subject,并关联 securityManager:
@Bean public ShiroFilterFactoryBean shiroFilterFactoryBean(@Qualifier("SecurityManager") DefaultWebSecurityManager defaultWebSecurityManager) { ShiroFilterFactoryBean subject = new ShiroFilterFactoryBean(); // 设置安全管理器 // 需要关联 securityManager ,通过参数把 securityManager 对象传递过来 subject.setSecurityManager(defaultWebSecurityManager); return subject; }
完整配置类:
@Configuration public class ShiroConfig { @Bean public ShiroFilterFactoryBean shiroFilterFactoryBean(@Qualifier("SecurityManager") DefaultWebSecurityManager defaultWebSecurityManager) { ShiroFilterFactoryBean subject = new ShiroFilterFactoryBean(); // 设置安全管理器 // 需要关联 securityManager ,通过参数把 securityManager 对象传递过来 subject.setSecurityManager(defaultWebSecurityManager); return subject; } @Bean(name = "SecurityManager") public DefaultWebSecurityManager getDefaultWebSecurity(@Qualifier("userRealm") UserRealm userRealm) { DefaultWebSecurityManager securityManager = new DefaultWebSecurityManager(); // 需要关联自定义的 Realm,通过参数把 Realm 对象传递过来 securityManager.setRealm(userRealm); return securityManager; } @Bean public UserRealm userRealm() { return new UserRealm(); } }
现在,我们来实现一个简单的页面拦截测试一下吧!
编写两个页面、在templates目录下新建一个 user 目录 add.html update.html:
页面内容可以自定义:
在index页面上,增加跳转链接功能:
<a th:href="@{/user/add}" rel="external nofollow" >add</a> <hr/> <a th:href="@{/user/update}" rel="external nofollow" >update</a>
编写跳转到页面的controller:
@RequestMapping("/user/add") public String toAdd() { return "user/add"; } @RequestMapping("/user/update") public String toUpdate() { return "user/update"; }
之后运行无误即可配置成功!
加载全部内容