package com.springboot.config;
import org.apache.shiro.codec.Base64;
import org.apache.shiro.mgt.SecurityManager;
import org.apache.shiro.session.mgt.eis.EnterpriseCacheSessionDAO;
import org.apache.shiro.session.mgt.eis.JavaUuidSessionIdGenerator;
import org.apache.shiro.session.mgt.quartz.QuartzSessionValidationScheduler;
import org.apache.shiro.spring.LifecycleBeanPostProcessor;
import org.apache.shiro.spring.security.interceptor.AuthorizationAttributeSourceAdvisor;
import org.apache.shiro.spring.web.ShiroFilterFactoryBean;
import org.apache.shiro.web.mgt.CookieRememberMeManager;
import org.apache.shiro.web.mgt.DefaultWebSecurityManager;
import org.apache.shiro.web.servlet.SimpleCookie;
import org.apache.shiro.web.session.mgt.DefaultWebSessionManager;
import org.springframework.aop.framework.autoproxy.DefaultAdvisorAutoProxyCreator;
import org.springframework.beans.factory.config.MethodInvokingFactoryBean;
import org.springframework.cache.ehcache.EhCacheCacheManager;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.DependsOn;
import com.springboot.core.shiro.credentials.RetryLimitHashedCredentialsMatcher;
import com.springboot.core.shiro.realm.UserRealm;
import com.springboot.core.shiro.spring.SpringCacheManagerWrapper;
import javax.servlet.Filter;
import java.util.LinkedHashMap;
import java.util.Map;
@Configuration
public class ShiroConfig {
@Bean
public ShiroFilterFactoryBean shiroFilter(SecurityManager securityManager) {
ShiroFilterFactoryBean shiroFilterFactoryBean = new ShiroFilterFactoryBean();
shiroFilterFactoryBean.setSecurityManager(securityManager);
//shiro自定义过滤器
Map<String, Filter> filters = new LinkedHashMap<>();
Map<String, String> filterChainDefinitionMap = new LinkedHashMap<>();
shiroFilterFactoryBean.setFilters(filters);
//配置记住我或认证通过可以访问的地址
// 配置不会被拦截的链接 顺序判断
filterChainDefinitionMap.put("/login","authc");
//配置退出 过滤器,其中的具体的退出代码Shiro已经替我们实现了
filterChainDefinitionMap.put("/logout", "logout");
//未授权界面;
filterChainDefinitionMap.put("/authenticated", "authc");
//<!-- 过滤链定义,从上向下顺序执行,一般将/**放在最为下边 -->:这是一个坑呢,一不小心代码就不好使了;
filterChainDefinitionMap.put("/static/**", "anon");
filterChainDefinitionMap.put("/css/**", "anon");
filterChainDefinitionMap.put("/fonts/**", "anon");
filterChainDefinitionMap.put("/img/**", "anon");
filterChainDefinitionMap.put("/js/**", "anon");
filterChainDefinitionMap.put("/plugins/**", "anon");
//<!-- authc:所有url都必须认证通过才可以访问; anon:所有url都都可以匿名访问-->
filterChainDefinitionMap.put("/**", "user");
// 如果不设置默认会自动寻找Web工程根目录下的"/login.jsp"页面
shiroFilterFactoryBean.setLoginUrl("/login");
shiroFilterFactoryBean.setFilterChainDefinitionMap(filterChainDefinitionMap);
return shiroFilterFactoryBean;
}
/**
* 安全管理器
* @param userRealm
* @return
*/
@Bean
public DefaultWebSecurityManager securityManager(UserRealm userRealm, DefaultWebSessionManager sessionManager,SpringCacheManagerWrapper cacheManager){
DefaultWebSecurityManager securityManager = new DefaultWebSecurityManager();
securityManager.setRealm(userRealm);
securityManager.setSessionManager(sessionManager);
securityManager.setCacheManager(cacheManager);
securityManager.setRememberMeManager(rememberMeManager());
return securityManager;
}
/**
* 会话ID生成器
*
* @return
*/
@Bean
public JavaUuidSessionIdGenerator sessionIdGenerator() {
return new JavaUuidSessionIdGenerator();
}
/**
* 会话Cookie模板
*
* @return
*/
@Bean
public SimpleCookie sessionIdCookie() {
SimpleCookie simpleCookie = new SimpleCookie("sid");
simpleCookie.setHttpOnly(true);
simpleCookie.setMaxAge(-1);
return simpleCookie;
}
/**
* 自动登陆自动登陆cookie
*
* @return
*/
@Bean
public SimpleCookie rememberMeCookie() {
SimpleCookie simpleCookie = new SimpleCookie("rememberMe");
simpleCookie.setHttpOnly(true);
simpleCookie.setMaxAge(2592000);
return simpleCookie;
}
/**
* rememberMe管理器
*
* @return
*/
@Bean
public CookieRememberMeManager rememberMeManager() {
CookieRememberMeManager cookieRememberMeManager = new CookieRememberMeManager();
cookieRememberMeManager.setCipherKey(Base64.decode("4AvVhmFLUs0KTA3Kprsdag=="));
cookieRememberMeManager.setCookie(rememberMeCookie());
return cookieRememberMeManager;
}
/**
* 会话DAO
*
* @return
*/
@Bean
public EnterpriseCacheSessionDAO sessionDAO() {
EnterpriseCacheSessionDAO enterpriseCacheSessionDAO = new EnterpriseCacheSessionDAO();
enterpriseCacheSessionDAO.setActiveSessionsCacheName("shiro-activeSessionCache");
enterpriseCacheSessionDAO.setSessionIdGenerator(sessionIdGenerator());
return enterpriseCacheSessionDAO;
}
/**
* 会话管理器
*
* @return
*/
@Bean
public DefaultWebSessionManager sessionManager() {
DefaultWebSessionManager sessionManager = new DefaultWebSessionManager();
sessionManager.setGlobalSessionTimeout(1800000);
sessionManager.setDeleteInvalidSessions(true);
// sessionManager.setSessionValidationScheduler(sessionValidationScheduler);
sessionManager.setSessionDAO(sessionDAO());
sessionManager.setSessionValidationSchedulerEnabled(true);
sessionManager.setSessionIdCookie(sessionIdCookie());
return sessionManager;
}
/**
* 会话验证调度器
*
* @return
*/
@Bean
public QuartzSessionValidationScheduler sessionValidationScheduler(DefaultWebSessionManager sessionManager) {
QuartzSessionValidationScheduler sessionValidationScheduler = new QuartzSessionValidationScheduler();
sessionValidationScheduler.setSessionValidationInterval(1800000);
sessionValidationScheduler.setSessionManager(sessionManager);
return sessionValidationScheduler;
}
/**
* 缓存管理器
*
* @return
*/
@Bean
public SpringCacheManagerWrapper cacheManager(EhCacheCacheManager springCacheManager) {
SpringCacheManagerWrapper cacheManager = new SpringCacheManagerWrapper();
cacheManager.setCacheManager(springCacheManager);
return cacheManager;
}
/**
* 凭证匹配器
*
* @return
*/
@Bean
public RetryLimitHashedCredentialsMatcher credentialsMatcher(SpringCacheManagerWrapper cacheManager) {
RetryLimitHashedCredentialsMatcher credentialsMatcher = new RetryLimitHashedCredentialsMatcher(cacheManager);
credentialsMatcher.setHashAlgorithmName("md5");
credentialsMatcher.setHashIterations(2);
credentialsMatcher.setStoredCredentialsHexEncoded(true);
return credentialsMatcher;
}
/**
* Realm实现
*
* @return
*/
@Bean
public UserRealm userRealm(RetryLimitHashedCredentialsMatcher credentialsMatcher) {
UserRealm userRealm = new UserRealm();
userRealm.setCredentialsMatcher(credentialsMatcher);
userRealm.setCachingEnabled(false);
return userRealm;
}
/**
* Shiro生命周期处理器
*
* @return
*/
@Bean
public LifecycleBeanPostProcessor lifecycleBeanPostProcess
没有合适的资源?快使用搜索试试~ 我知道了~
资源推荐
资源详情
资源评论
收起资源包目录
SpringBootweb项目案例 (843个子文件)
00a39ce41c6f9a2b69aac5362e42ec1b93fbc7 45B
02e3659f9525098a9866dbec4af5ad0fb62346 95B
0403104e9027d0b869a92c4a200a1c6ef94c95 55B
058f9b6ea50bef3d281a1ec9c947c2d6f0d05d 510B
06fd351337c4585f6023df956cf33b7628ffae 49B
07870dfc33ea84d8cdb1a961837a81c9865bcd 228B
0a500ec4e4b9d5d9f01d4a63ee9254c2894a01 139B
0a769c57e06795a51166229f1854a21a2c2311 48B
0b6d97c03a0687221e20d88cb7ec16a89c835a 617B
0b81309db0426b6181fce0695186270ef8c0ef 192B
0be44ba42d32f63da51a6a930e0dc9595854c0 59B
0de0d11b692c7d35244f5019f8a780f028be95 280B
0e3823c36fa3fa24adfb27529dac819707ed81 551B
0edd7574cd2308fff1e6ecd462026e64e1a8cd 75B
0fffd148f69edae64718c7033144c64dc71376 45B
101d1358ad77c28290c114b6d3f3ab16867da2 114B
1288bcb86c587096a6a2c29893d2818e22ac1f 1KB
12f8806c73bc2a5bc93543cf436f5109d93d09 174B
130c6f6d6d7fd8863e87f38a4e97b9725246be 79B
162e0a421f0aa22ccd496230a2a3714e286d72 227B
1689237101dac0cde28394757f5520b316dc89 128B
178b458ee4bca957c413285053541c179576d7 676B
1797abcfa2aa9852f0ed2447ec8b0bcec9bd90 1KB
187004631bcf4a0632b32638e88d5e81c1528f 179B
19160859fb4f4e6d19207b542619b063431852 966B
1ac078edc0c9d20f71acf5e6477d119302b581 923B
1ad6125e716fee342061ede60ec035712e232b 859B
1d9add91e7396a2981f034ca7f845d1683cb83 478B
1e5e3f459738f464ffd3dbbedc6f1504a6115c 283B
1f0cd2d63fbc73f631a8b5d035f9c226e9ba2b 284B
20d93b2b8d18548882c6c1690f9431275d292d 836B
22412dda49e26ae7f9c107dc9c48230c60b0bc 1.14MB
22c1fc58567add3c589f56731caa0865fc5779 2KB
252ecf520466c04f302dcfde3e620c9173a6a7 398B
27054d93d54927e4bed2d5617cd07f5b97cbc1 56B
27f158a756ea1250323ba06b18ae429d22a83b 917B
28df9c9f92a6f82b4ea0fddf83c31e5ffd0da8 283B
2a44210782e6fe511b9e80ed40d285cf7d9ccc 2KB
2ae175f1a378d0d9d6162504a2dc70cdb21fc2 311B
2e9267f495cde7c82d8bedcba00c6dd003187b 68B
2efc8e601988b71d976120e10c7cc088af3570 191B
358ad40b35c591d42a53fff10aa21aabcbed99 44KB
35b371a3f0c2804126f6a1ecd74663f684bc39 86B
3651afb2e8e71e7b50f2a00a929a9cbf27bc76 272B
374db9639f8bde8692a43bf97d1d387d4eb2b3 1KB
3a2f7d00f3bd32f71603007f812aa1ed8b6b1e 45B
3b4db79436ea75f43a88723d0034904e8da5b0 1KB
3b58a28622bc8d37954f14b48a56a30e568dd8 737B
3d22266ac8aa2f8df2edef68082c789727841d 24B
434a8f01c80108f539c41973bdd36a97fc5c1f 314B
43c754d5966f76ef751f98b1d31d6cd3586ced 196B
44db24e7294ec3ea17531b38ca8b1686708dee 95B
45b8fc8dec82ee8313da5ce868567eb6da36d5 113B
47340831fd62b36f4436ae909bd09bf9f271eb 196B
48b677dcb441ce6dbe3157af7fe06bd4fafe32 759B
4d690bccdba2c70af45311a9152b464f4f522f 444B
4f4f7955acc095d8ad440061cf8220b346eeff 851B
4fdb1c6d5f68ed33e2bafae7e4e663bd2c49ba 221B
4fdd44c2394095b97b886404437b45cf8d8b39 761B
509ae9e031ef290a5b18a6b898d47c56784c06 885B
50bea0196ae1404517bf81f9abf68120747cd6 192B
511b18791c32a60982b6bb0ca2beb4e583f7f1 76B
5141a8b858c4464efe357667e942c1de7b3b2c 210B
53947e391ad88e4e6b9f00f9c66d196ccce71e 1KB
5450f9a3d39a93403f94bcce1b449a96c9f909 1KB
54a20746b0e0b16803f539588fd0575699f23e 72B
557712c307ad05c6fae50e662d34ab54af0dbe 52B
55dc04cbf0eaa1f7f436b41e9e7e76fcb84519 191B
55f2ab0d9222154c077f528204859f7a6b3a23 49B
5706445a73d60a8e0c9396efde21a97dc28358 241B
571a83659d77a81a626ffed981b6c39cfb2491 908B
57bbabb9e11ac1da4ee907368b0c6c64611e78 985B
58c863ae3b3df458387efcbd1200304f7ebf7f 53B
59787710579e2ec42d122f86a5d9c8a49123af 49B
5c0e65ab1439a055e12eeeff12c8a2cae47156 52B
5f1350931c006068ac0f64b54de8a4e1cfa5f0 512B
6034a5ba92925e7a392398f034b26b081de373 74B
61cb4a4b41a4d1ba908111e3b79774b876caaf 180B
6354538d82df2d6a0bd4fcc6559e36ec2989e6 850B
68f9f16dd8682e9852233392f66f64c98291dd 45B
6a557a338c14489bb2e51a52952003ea954e63 76B
6b346e67a750bedf4a9c47cc354fe590c98d24 748B
6bb71850a0e59302ab3d2b5f086598786ecb7e 84B
6c78a6cf3251d984d589da9a36e44a62464400 139B
6c836eed20e598aac734cb9ba86b7139cd937a 351B
6cf0a74ffafcf60a07ee9fec07e90b880c6248 86B
6fb421a154bc861f914f8972f8648dd18b1649 1KB
716ead500ff68a505326d583edd35574e66fee 328B
71bae02c7960664cfb15180db6b45b799f1aae 221B
725345cb54289e1ae50cc2b845a908bbbaf4db 49KB
72e417a9d74d31930c60d113d8e07220be2a06 74B
73248442a0de645988b59ea1f3fbeebe80659b 129B
740aafa1575a16f4db21fb0c934de6b58d95e0 800B
768ee41feafdd747a5602033aa575920483bcb 600B
76e5c06c379f9c381d7459a6a7e09e34ae7168 179B
77a1d03954327afccc6e76772da0aca85299b0 56B
7acf597c057ba2e210763afdba9ba7db35cb11 17KB
7b9587089a874c5a31f49814ae9666b0624c7a 175B
7c8ddd0ddfcdcd481f727f8ad5295c77792f6e 36KB
7ddabb498729a1a39d55cff590d1d59e5c8120 50B
共 843 条
- 1
- 2
- 3
- 4
- 5
- 6
- 9
资源评论
- 暗灭天涯2018-12-10还可以吧。。。
- sinat_258660632019-02-18可以,文件齐全,运行正常
- 此广告位招租2019-01-18还可以吧...
- D-day2020-09-05运行起来之后,登录密码是多少啊?
132_Jeck
- 粉丝: 1
- 资源: 1
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- week6.1.7z
- 移动机器人自主路径规划之RRTStar算法MATLAB实现代码
- 基于Python+OpenCV+FFmpeg实现自动识别电影剪辑+分析剪辑主题颜色+源码+文档(毕业设计&课程设计&项目开发)
- 基于python的二手商品交易平台 python+django开发的供需平台
- 微信小程序源码 侧滑布局小程序 (源码下载 +内附使用说明)
- heima-JUC-资料
- coreg_FSL.sh
- ROS+YOLOV8+SLAM智能小车导航实战(四、激光雷达+SLAM建图)
- 什么是决策树,有哪些适用场景?
- 基于python开发的口红色号识别程序+源码+开发文档+源码解析(毕业设计&课程设计&项目开发)
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功