1、shiro
什么是shiro
是一款主流的java安全框架,,不依赖任何容器,可以运行再JavaEE 和 javaSE项目中,它的主要作用是对访问系统的用户进行身份认证、授权、会话管理、加密等操作。
Shiro 就是用来解决安全管理的系统化框架
2、Shiro核心框架
用户、角色、权限
给角色赋予权限,给用户赋予角色
1、UsernamePasswordToken,Shiro用来封装用户登录信息,使用用户登录信息创建令牌Token
2、SecurityManager,Shiro的核心部分,负责安全认证和授权
3、Subject,Shiro的一个抽象概念,包含了用户信息
4、Realm,开发者自定义的模块,根据项目的需求, 全部写在Realm中。
5、AuthenticationInfo , 用户的角色信息集合,认证时使用。
6、AuthorzationInfo,角色的权限信息集合,授权时使用
7、DefaultWebSecurityManager,安全管理器,开发者自定义的Realm需要注入到DefaultWebSecurityManager进行管理才能生效
8、ShiroFilterFactoryBean,过滤器工厂,Shiro的基本运行机制是开发者定制规则,Shiro去执行,具体的执行操作就是由ShiroFilterFactoryBean创建的一个个Filter对象完成。
Shiro的运行机制如下图所示:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-hsDYUUGw-1617691354932)(E:\校园表白墙\image\shiro_01.png)]
3、Spring Boot整合Shiro
1、 集成Shiro及相关组件,pom.xml
<!-- shiro -->
<dependency>
<groupId>org.apache.shiro</groupId>
<artifactId>shiro-spring</artifactId>
<version>1.5.3</version>
</dependency>
2、自定义Shiro过滤器
public class UserRealm extends AuthorizingRealm {
@Autowired
private SysUserService sysUserService;
/**
* AuthorizationInfo 角色的权限信息集合,授权时使用
* @param principalCollection
* @return
*/
@Override
protected AuthorizationInfo doGetAuthorizationInfo(PrincipalCollection principalCollection) {
return null;
}
/**
* AuthenticationInfo 用户的角色信息集合,认证时使用
* @param authenticationToken
* @return
*/
@Override
protected AuthenticationInfo doGetAuthenticationInfo(AuthenticationToken authenticationToken) throws AuthenticationException {
UsernamePasswordToken token = (UsernamePasswordToken) authenticationToken;
SysUser sysUser = sysUserService.findByUserName(token.getUsername());
if (sysUser!=null){
return new SimpleAuthenticationInfo(sysUser,sysUser.getPassword(),getName());
}
return null;
}
}
3.配置类
/**
* @auther jia
* @date 2021/4/2 17:48
* @dec shiro配置类
*/
@Configuration
public class ShiroConfig {
@Bean
public ShiroFilterFactoryBean shiroFilterFactoryBean( @Qualifier("securityManager") DefaultWebSecurityManager securityManager){
ShiroFilterFactoryBean factoryBean = new ShiroFilterFactoryBean();
factoryBean.setSecurityManager(securityManager);
return factoryBean;
}
@Bean
public DefaultWebSecurityManager securityManager(@Qualifier("sysUserRealm") SysUserRealm sysUserRealm){
DefaultWebSecurityManager manager = new DefaultWebSecurityManager();
manager.setRealm(sysUserRealm);
return manager;
}
@Bean
public SysUserRealm sysUserRealm() {
return new SysUserRealm();
}
}
4.编写认证和授权规则:
认证过滤器:
anon:无需认证。
authc:必须认证。
authcBasic:需要通过HTTPBasic认证。
user:不一定通过认证,只要曾经被Shiro记录即可,比如:记住我。
授权过滤器
perms:必须拥有某个权限才能访问
role:必须拥有某个角色才能访问
port:请求端口必须是指定值才可以
rest:请求必须基于RESTful,POST、PULL、DELETE
ssl:必须是安全的URL请求,协议HTTPS
Shiro 整合 Thymeleaf
1、pom.xml引入依赖
<!--shiro 整合 thymeleaf-->
<dependency>
<groupId>com.github.theborakompanioni</groupId>
<artifactId>thymeleaf-extras-shiro</artifactId>
<version>2.0.0</version>
</dependency>
2、配置类添加 ShiroDialect
@Bean
public ShiroDialect shiroDialect(){
ShiroDialect shiroDialect = new ShiroDialect();
return shiroDialect;
}
3、页面使用