SpringBoot整合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";
}
之后运行无误即可配置成功!
到此这篇关于SpringBoot整合Shiro的环境搭建教程的文章就介绍到这了,更多相关SpringBoot整合Shiro内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!