package com.wangziyang.mes.system.config.shiro;
import org.apache.shiro.cache.ehcache.EhCacheManager;
import org.apache.shiro.mgt.SecurityManager;
import org.apache.shiro.session.SessionListener;
import org.apache.shiro.session.mgt.eis.MemorySessionDAO;
import org.apache.shiro.session.mgt.eis.SessionDAO;
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.DefaultWebSecurityManager;
import org.apache.shiro.web.session.mgt.DefaultWebSessionManager;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import javax.servlet.Filter;
import java.util.*;
/**
* Shiro 安全管理器配置
*
* @author SongPeng
* @date 2019/10/17 8:09
*/
@Configuration
public class ShiroConfig {
//缓存方式
public static String CACHE_TYPE_REDIS = "redis";
@Value("${spring.redis.host}")
private String host;
@Value("${spring.redis.password}")
private String password;
@Value("${spring.redis.port}")
private int port;
@Value("${spring.redis.timeout}")
private int timeout;
@Value("${spring.cache.type}")
private String cacheType;
@Value("${server.session-timeout}")
private int tomcatTimeout;
@Bean
public RetryLimitCredentialsMatcher getRetryLimitCredentialsMatcher() {
RetryLimitCredentialsMatcher rm = new RetryLimitCredentialsMatcher(ehCacheManager());
rm.setHashAlgorithmName("md5");
rm.setHashIterations(3);
return rm;
}
/**
* TODO 加盐,不用额外字段,使用用户名+密码
*
* @return
*/
@Bean
public ShiroRealm shiroRealm() {
ShiroRealm sr = new ShiroRealm();
sr.setCredentialsMatcher(getRetryLimitCredentialsMatcher());
return sr;
}
@Bean
public static LifecycleBeanPostProcessor getLifecycleBeanPostProcessor() {
return new LifecycleBeanPostProcessor();
}
@Bean
ShiroFilterFactoryBean shiroFilterFactoryBean(SecurityManager securityManager) {
ShiroFilterFactoryBean shiroFilterFactoryBean = new ShiroFilterFactoryBean();
shiroFilterFactoryBean.setSecurityManager(securityManager);
shiroFilterFactoryBean.setLoginUrl("/login-ui");
shiroFilterFactoryBean.setSuccessUrl("/admin/index");
shiroFilterFactoryBean.setUnauthorizedUrl("/403");
LinkedHashMap<String, String> filterChainDefinitionMap = new LinkedHashMap<>();
filterChainDefinitionMap.put("/login", "anon");
filterChainDefinitionMap.put("/verification/code", "anon");
filterChainDefinitionMap.put("/css/**", "anon");
filterChainDefinitionMap.put("/image/**", "anon");
filterChainDefinitionMap.put("/js/**", "anon");
filterChainDefinitionMap.put("/json/**", "anon");
filterChainDefinitionMap.put("/lib/**", "anon");
filterChainDefinitionMap.put("/fonts/**", "anon");
filterChainDefinitionMap.put("/docs/**", "anon");
filterChainDefinitionMap.put("/druid/**", "anon");
filterChainDefinitionMap.put("/upload/**", "anon");
filterChainDefinitionMap.put("/files/**", "anon");
filterChainDefinitionMap.put("/logout", "logout");
filterChainDefinitionMap.put("/client/**", "anon");
filterChainDefinitionMap.put("/", "authc");
filterChainDefinitionMap.put("/blog", "anon");
filterChainDefinitionMap.put("/blog/open/**", "anon");
filterChainDefinitionMap.put("/**", "authc");
Map<String, Filter> filters = new HashMap<>(2);
Filter loginFilter = new SpLoginFormFilter();
//此处使用自定义的拦截器,autho默认使用FormAuthenticationFilter拦截器
filters.put("authc", loginFilter);
shiroFilterFactoryBean.setFilters(filters);
// TODO 测试期间暂时打开
//filterChainDefinitionMap.put("/**", "anon");
shiroFilterFactoryBean.setFilterChainDefinitionMap(filterChainDefinitionMap);
return shiroFilterFactoryBean;
}
@Bean
public SecurityManager securityManager() {
DefaultWebSecurityManager securityManager = new DefaultWebSecurityManager();
//设置realm.
securityManager.setRealm(shiroRealm());
// 自定义缓存实现 使用redis
if (CACHE_TYPE_REDIS.equals(cacheType)) {
securityManager.setCacheManager(rediscacheManager());
} else {
securityManager.setCacheManager(ehCacheManager());
}
securityManager.setSessionManager(sessionManager());
return securityManager;
}
/**
* 开启shiro aop注解支持.
* 使用代理方式;所以需要开启代码支持;
*
* @param securityManager
* @return
*/
@Bean
public AuthorizationAttributeSourceAdvisor authorizationAttributeSourceAdvisor(SecurityManager securityManager) {
AuthorizationAttributeSourceAdvisor authorizationAttributeSourceAdvisor = new AuthorizationAttributeSourceAdvisor();
authorizationAttributeSourceAdvisor.setSecurityManager(securityManager);
return authorizationAttributeSourceAdvisor;
}
/**
* 配置shiro redisManager
*
* @return
*/
@Bean
public RedisManager redisManager() {
RedisManager redisManager = new RedisManager();
redisManager.setHost(host);
redisManager.setPort(port);
// 配置缓存过期时间
redisManager.setExpire(1800);
//redisManager.setTimeout(1800);
redisManager.setPassword(password);
return redisManager;
}
/**
* cacheManager 缓存 redis实现
* 使用的是shiro-redis开源插件
*
* @return
*/
public RedisCacheManager rediscacheManager() {
RedisCacheManager redisCacheManager = new RedisCacheManager();
redisCacheManager.setRedisManager(redisManager());
return redisCacheManager;
}
/**
* RedisSessionDAO shiro sessionDao层的实现 通过redis
* 使用的是shiro-redis开源插件
*/
@Bean
public RedisSessionDAO redisSessionDAO() {
RedisSessionDAO redisSessionDAO = new RedisSessionDAO();
redisSessionDAO.setRedisManager(redisManager());
return redisSessionDAO;
}
@Bean
public SessionDAO sessionDAO() {
if (CACHE_TYPE_REDIS.equals(cacheType)) {
return redisSessionDAO();
} else {
return new MemorySessionDAO();
}
}
/**
* shiro session的管理
*/
@Bean
public DefaultWebSessionManager sessionManager() {
DefaultWebSessionManager sessionManager = new DefaultWebSessionManager();
sessionManager.setGlobalSessionTimeout(tomcatTimeout * 1000);
sessionManager.setSessionDAO(sessionDAO());
Collection<SessionListener> listeners = new ArrayList<>();
listeners.add(new SpSessionListener());
sessionManager.setSessionListeners(listeners);
return sessionManager;
}
@Bean
@ConditionalOnMissingBean
public EhCacheManager ehCacheManager() {
EhCacheManager em = new EhCacheManager();
em.setCacheManagerConfigFile("classpath:ehcache.xml");
return em;
}
}
没有合适的资源?快使用搜索试试~ 我知道了~
温馨提示
基于springBoot+ssm+redis+shiro+layui+mysql的MES智能制造执行系统,系统经多次测试,运行无误,大家放心下载
资源推荐
资源详情
资源评论
收起资源包目录
基于springBoot+ssm+redis+shiro+layui+mysql的MES智能制造执行系统 (566个子文件)
mvnw.cmd 6KB
layui.css 73KB
font-awesome.css 37KB
font-awesome.min.css 30KB
company.css 18KB
wangEditor.css 17KB
wangEditor.min.css 15KB
layer.css 14KB
splayui.css 11KB
layui.mobile.css 10KB
treeTable.css 9KB
zyupload-1.0.0.min.css 9KB
laydate.css 7KB
planDemo.css 7KB
404.css 3KB
effect.css 1KB
start.css 1KB
step.css 1KB
public.css 1KB
code.css 1KB
admin.css 0B
client.css 0B
Dockerfile 284B
fontawesome-webfont.eot 162KB
iconfont.eot 46KB
icon.ftl 96KB
addOrUpdate.ftl 14KB
addOrUpdate.ftl 12KB
addOrUpdate.ftl 12KB
formStep.ftl 10KB
list.ftl 10KB
addOrUpdate.ftl 9KB
list.ftl 9KB
list.ftl 8KB
list.ftl 7KB
login.ftl 7KB
list.ftl 7KB
index.ftl 7KB
list.ftl 7KB
list.ftl 7KB
list.ftl 6KB
list.ftl 6KB
list.ftl 6KB
addOrUpdate.ftl 6KB
404old.ftl 5KB
list.ftl 5KB
addOrUpdate.ftl 5KB
planDemo.ftl 5KB
addOrUpdate.ftl 4KB
addOrUpdate.ftl 4KB
searchPanelMaterile.ftl 4KB
entity.java.ftl 4KB
spSearchPanel4SysUser.ftl 4KB
iconPicker.ftl 4KB
addOrUpdate.ftl 3KB
editor.ftl 3KB
addOrUpdate.ftl 3KB
welcome.ftl 2KB
plandg.ftl 2KB
colorSelect.ftl 2KB
mapper.xml.ftl 1KB
404.ftl 1KB
common.ftl 1KB
controller.java.ftl 1KB
serviceImpl.java.ftl 719B
500.ftl 559B
403.ftl 557B
service.java.ftl 419B
mapper.java.ftl 417B
index.ftl 146B
59.gif 10KB
22.gif 10KB
24.gif 8KB
13.gif 7KB
16.gif 7KB
39.gif 6KB
64.gif 6KB
63.gif 6KB
50.gif 6KB
loading-0.gif 6KB
4.gif 6KB
1.gif 5KB
42.gif 5KB
71.gif 5KB
21.gif 5KB
20.gif 5KB
29.gif 5KB
70.gif 4KB
5.gif 4KB
17.gif 4KB
27.gif 4KB
9.gif 4KB
44.gif 4KB
11.gif 4KB
8.gif 4KB
3.gif 4KB
23.gif 4KB
34.gif 4KB
41.gif 4KB
38.gif 4KB
共 566 条
- 1
- 2
- 3
- 4
- 5
- 6
资源评论
reg183
- 粉丝: 1811
- 资源: 1万+
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功