package com.lq.mycreate.config;
import com.lq.mycreate.filter.CustomRolesOrAuthorizationFilter;
import com.lq.mycreate.realm.UserRealm;
import com.lq.mycreate.session.CustomSessionManager;
import org.apache.shiro.authc.credential.HashedCredentialsMatcher;
import org.apache.shiro.mgt.SecurityManager;
import org.apache.shiro.session.mgt.SessionManager;
import org.apache.shiro.spring.web.ShiroFilterFactoryBean;
import org.apache.shiro.web.mgt.DefaultWebSecurityManager;
import org.crazycake.shiro.RedisCacheManager;
import org.crazycake.shiro.RedisManager;
import org.crazycake.shiro.RedisSessionDAO;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import javax.servlet.Filter;
import java.util.LinkedHashMap;
import java.util.Map;
/**
* @Description: TODO
* @CreateTime: 2023-11-07 10:39
* @Author: lq
* @Version: 1.0
*/
@Configuration
public class ShiroConfig {
//@Autowired
//private UserRealm userRealm;
@Bean
public ShiroFilterFactoryBean shiroFilterFactoryBean(@Qualifier("securityManager") SecurityManager securityManager) {
ShiroFilterFactoryBean factoryBean = new ShiroFilterFactoryBean();
//设置securityManager
factoryBean.setSecurityManager(securityManager);
//某些页面需要登录后才能访问,如果未登录,会交给指定的url处理;
//如果是前后端分离,设置未controller映射的url:如果前后端未分离,设置为也视图页面的url
factoryBean.setLoginUrl("/login");
//登录成功后跳转到的url
//如果前后端分离,则不用设置此项
//factoryBean.setSuccessUrl("/");
//没有权限,未授权会交给指定的url处理,处理方式一般是:先验证登录,再验证是否有权限;
//如果前后端没有分离,直接设置为视图页面的url
factoryBean.setUnauthorizedUrl("/pub/notPermit.html");
//设置自定义的Filter
Map<String, Filter> filterMap = new LinkedHashMap<>();
filterMap.put("roleOrFilter", new CustomRolesOrAuthorizationFilter());
factoryBean.setFilters(filterMap);
//Filter的执行有一定顺序,应该使用LinkedHashMap,使用HashMap会出问题
Map<String, String> filterChainDefinitionMap = new LinkedHashMap<>();
//退出过滤器
filterChainDefinitionMap.put("/logout", "logout");
//不需要登录(校验)就可以访问
filterChainDefinitionMap.put("/pub/**", "anon");
//用户登录后才可以访问
filterChainDefinitionMap.put("/authc/**", "authc");
//角色是管理员的用户才可以访问
//filterChainDefinitionMap.put("/admin/**","roleOrFilter[admin]");
//具有update权限的用户才可以访问
filterChainDefinitionMap.put("/update", "perms[update]");
//[]标识参数是数组,有多个元素时逗号隔开,[video_watch,video_download],必须同时满足[]中的要求才会通过
//LinkedHashMap,Filter的执行顺序和添加顺序一致,一般把/**放到最后
//前面的url未匹配的请求路径,就使用/**来过滤
filterChainDefinitionMap.put("/**", "authc");
factoryBean.setFilterChainDefinitionMap(filterChainDefinitionMap);
return factoryBean;
}
/**
* 获取redisManager
*
* @return RedisManager
*/
public RedisManager redisManager() {
RedisManager redisManager = new RedisManager();
//设置redis服务器的地址,默认就是127.0.0.1:6379
redisManager.setHost("127.0.0.1:6379");
return redisManager;
}
/**
* 获取RedisSessionDAO
*
* @return RedisSessionDAO
*/
public RedisSessionDAO redisSessionDAO() {
RedisSessionDAO redisSessionDAO = new RedisSessionDAO();
redisSessionDAO.setRedisManager(redisManager());
return redisSessionDAO;
}
/**
* 获取自定义的sessionManager
*
* @return
*/
@Bean
public SessionManager sessionManager() {
CustomSessionManager customSessionManager = new CustomSessionManager();
//设置session超时时间,单位ms,默认30min
customSessionManager.setGlobalSessionTimeout(1800_000);
//配置session持久化
customSessionManager.setSessionDAO(redisSessionDAO());
return customSessionManager;
}
public RedisCacheManager redisCacheManager() {
RedisCacheManager redisCacheManager = new RedisCacheManager();
redisCacheManager.setRedisManager(redisManager());
//设置授权信息对应的key的过期时间,单位s,用户权限有变化时,除了要更新数据库,还需要更新redis中对应的key
//一周
redisCacheManager.setExpire(24 * 60 * 60 * 7);
return redisCacheManager;
}
/**
* 配置SecurityManager
*
* @return
*/
@Bean
public SecurityManager securityManager() {
DefaultWebSecurityManager securityManager = new DefaultWebSecurityManager();
//如果前后端没有分离,则不必使用sessionManager,不必设置SessionManager相关配置
//securityManager.setSessionManager(sessionManager());
//使用自定义的CacheManager
//securityManager.setCacheManager(redisCacheManager());
//设置Realm,建议放到最后,否则可能会出问题
securityManager.setRealm(userRealm());
return securityManager;
}
/**
* 返回密码匹配器
*
* @return
*/
public HashedCredentialsMatcher hashedCredentialsMatcher() {
HashedCredentialsMatcher matcher = new HashedCredentialsMatcher();
//设置加密算法
matcher.setHashAlgorithmName("md5");
//设置加密次数
matcher.setHashIterations(2);
//设置密文是16进制编码,false是base64编码
matcher.setStoredCredentialsHexEncoded(true);
return matcher;
}
/**
* 返回自定义的realm
*
* @return
*/
@Bean
public UserRealm userRealm() {
UserRealm userRealm = new UserRealm();
//设置密码匹配器
userRealm.setCredentialsMatcher(hashedCredentialsMatcher());
//取消缓存
userRealm.setCachingEnabled(false);
return userRealm;
}
}
没有合适的资源?快使用搜索试试~ 我知道了~
资源推荐
资源详情
资源评论
收起资源包目录
SpringBoot整合Shiro工程 (213个子文件)
UserRealm.class 8KB
IsvInfo.class 6KB
ShiroConfig.class 4KB
UserInfo.class 3KB
RoleModule.class 3KB
UserRole.class 3KB
ModuleInfo.class 3KB
RoleInfo.class 3KB
IsvInfoController.class 3KB
TestController.class 2KB
LoginController.class 2KB
CustomRolesOrAuthorizationFilter.class 2KB
CustomSessionManager.class 1KB
DemoApplication.class 935B
HtmlController.class 860B
IsvInfoServiceImpl.class 835B
RoleModuleServiceImpl.class 724B
ModuleInfoServiceImpl.class 724B
UserInfoServiceImpl.class 710B
RoleInfoServiceImpl.class 710B
UserRoleServiceImpl.class 710B
UserInfoMapper.class 620B
RoleInfoMapper.class 610B
DemoApplicationTests.class 529B
RoleModuleMapper.class 397B
ModuleInfoMapper.class 397B
UserRoleMapper.class 391B
IsvInfoMapper.class 374B
RoleModuleService.class 327B
ModuleInfoService.class 327B
UserRoleService.class 321B
RoleInfoService.class 321B
UserInfoService.class 321B
IsvInfoService.class 246B
.gitignore 47B
login.html 314B
login.html 314B
notPermit.html 168B
notPermit.html 168B
index.html 138B
index.html 138B
add.html 103B
update.html 103B
add.html 103B
update.html 103B
mycreate.iml 12KB
ShiroConfig.java 6KB
UserRealm.java 4KB
TestController.java 2KB
IsvInfoController.java 2KB
CustomSessionManager.java 1KB
CustomRolesOrAuthorizationFilter.java 1KB
LoginController.java 1020B
DemoApplication.java 820B
IsvInfo.java 761B
IsvInfoServiceImpl.java 687B
HtmlController.java 615B
UserInfoMapper.java 552B
RoleInfoMapper.java 538B
ModuleInfoServiceImpl.java 515B
RoleModuleServiceImpl.java 515B
UserInfoServiceImpl.java 501B
RoleInfoServiceImpl.java 501B
UserRoleServiceImpl.java 501B
UserInfo.java 454B
RoleInfo.java 434B
RoleModule.java 429B
UserRole.java 421B
RoleModuleMapper.java 385B
ModuleInfoMapper.java 385B
UserRoleMapper.java 379B
IsvInfoMapper.java 370B
ModuleInfo.java 351B
RoleModuleService.java 336B
ModuleInfoService.java 336B
RoleInfoService.java 330B
UserRoleService.java 292B
UserInfoService.java 292B
IsvInfoService.java 257B
DemoApplicationTests.java 205B
application.properties 327B
application.properties 327B
uiDesigner.xml 9KB
workspace.xml 6KB
pom.xml 3KB
spring.xml 2KB
spring.xml 2KB
Project_Default.xml 1KB
RoleInfoMapper.xml 1KB
RoleInfoMapper.xml 1KB
UserInfoMapper.xml 1KB
UserInfoMapper.xml 1KB
compiler.xml 856B
jarRepositories.xml 843B
Maven__com_fasterxml_jackson_module_jackson_module_parameter_names_2_13_4.xml 742B
Maven__com_baomidou_mybatis_plus_spring_boot_autoconfigure_3_5_4_1.xml 741B
Maven__org_mybatis_spring_boot_mybatis_spring_boot_autoconfigure_2_3_1.xml 736B
Maven__org_thymeleaf_extras_thymeleaf_extras_java8time_3_0_4_RELEASE.xml 731B
Maven__org_springframework_boot_spring_boot_test_autoconfigure_2_7_5.xml 719B
Maven__org_springframework_boot_spring_boot_starter_thymeleaf_2_7_5.xml 712B
共 213 条
- 1
- 2
- 3
资源评论
墨神谕
- 粉丝: 36
- 资源: 2
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功