package com.sso.sys.shiro;
import java.util.LinkedHashMap;
import java.util.Map;
import javax.servlet.Filter;
import org.apache.shiro.mgt.SecurityManager;
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.filter.authc.LogoutFilter;
import org.apache.shiro.web.mgt.DefaultWebSecurityManager;
import org.apache.shiro.web.session.mgt.DefaultWebSessionManager;
import org.crazycake.shiro.RedisCacheManager;
import org.crazycake.shiro.RedisManager;
import org.crazycake.shiro.RedisSessionDAO;
import org.springframework.aop.framework.autoproxy.DefaultAdvisorAutoProxyCreator;
import org.springframework.boot.bind.RelaxedPropertyResolver;
import org.springframework.context.EnvironmentAware;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.PropertySource;
import org.springframework.core.env.Environment;
import org.springframework.stereotype.Component;
import com.sso.sys.shiro.secutity.CaptchaValidateFilter;
import com.sso.sys.shiro.secutity.KickoutSessionControlFilter;
import com.sso.sys.shiro.secutity.MyFormAuthenticationFilter;
import com.sso.sys.shiro.secutity.MyShiroRealm;
@Component
@Configuration
@PropertySource(value = {"classpath:application.yml"},encoding="utf-8")
public class ShiroConfig implements EnvironmentAware{
private RelaxedPropertyResolver propertyResolver;
public void setEnvironment(Environment env) {
this.propertyResolver = new RelaxedPropertyResolver(env, "spring.redis.");
}
@Bean
public ShiroFilterFactoryBean shiroFilter(SecurityManager securityManager) {
ShiroFilterFactoryBean shiroFilterFactoryBean = new ShiroFilterFactoryBean();
shiroFilterFactoryBean.setSecurityManager(securityManager);
// 没有登陆的用户只能访问登陆页面
shiroFilterFactoryBean.setLoginUrl("/login");
// 登录成功后要跳转的链接
shiroFilterFactoryBean.setSuccessUrl("/index");
shiroFilterFactoryBean.getSuccessUrl();
// 未授权界面; ----这个配置了没卵用,具体原因想深入了解的可以自行百度
//shiroFilterFactoryBean.setUnauthorizedUrl("/auth/403");
//自定义拦截器
Map<String, Filter> filtersMap = new LinkedHashMap<String, Filter>();
filtersMap.put("captchaVaildate", new CaptchaValidateFilter());
filtersMap.put("authc", new MyFormAuthenticationFilter());
filtersMap.put("logout", new LogoutFilter());
//限制同一帐号同时在线的个数。
filtersMap.put("kickout", kickoutSessionControlFilter());
shiroFilterFactoryBean.setFilters(filtersMap);
// 权限控制map.
Map<String, String> filterChainDefinitionMap = new LinkedHashMap<String, String>();
filterChainDefinitionMap.put("/css/**", "anon");
filterChainDefinitionMap.put("/js/**", "anon");
filterChainDefinitionMap.put("/img/**", "anon");
filterChainDefinitionMap.put("/404/**", "anon");
filterChainDefinitionMap.put("/401/**", "anon");
filterChainDefinitionMap.put("/admin/**", "authc,roles[admin]");
// filterChainDefinitionMap.put("/login", "anon");
// filterChainDefinitionMap.put("/doLogin", "authc");
filterChainDefinitionMap.put("/logout", "logout");
filterChainDefinitionMap.put("/kickout", "anon");
filterChainDefinitionMap.put("/validatecodeServlet", "anon");
filterChainDefinitionMap.put("/**", "authc,kickout");
shiroFilterFactoryBean.setFilterChainDefinitionMap(filterChainDefinitionMap);
return shiroFilterFactoryBean;
}
@Bean
public SecurityManager securityManager() {
DefaultWebSecurityManager securityManager = new DefaultWebSecurityManager();
// 设置realm.
securityManager.setRealm(myShiroRealm());
// 自定义缓存实现 使用redis
securityManager.setCacheManager(cacheManager());
// 自定义session管理 使用redis
securityManager.setSessionManager(sessionManager());
return securityManager;
}
/**
* 身份认证realm; (这个需要自己写,账号密码校验;权限等)
*
* @return
*/
@Bean
public MyShiroRealm myShiroRealm() {
MyShiroRealm myShiroRealm = new MyShiroRealm();
return myShiroRealm;
}
/**
* cacheManager 缓存 redis实现
* 使用的是shiro-redis开源插件
*
* @return
*/
public RedisCacheManager cacheManager() {
RedisCacheManager redisCacheManager = new RedisCacheManager();
redisCacheManager.setRedisManager(redisManager());
return redisCacheManager;
}
/**
* 配置shiro redisManager
* 使用的是shiro-redis开源插件
*
* @return
*/
public RedisManager redisManager() {
RedisManager redisManager = new RedisManager();
redisManager.setHost(propertyResolver.getProperty("host"));
redisManager.setPort(Integer.parseInt(propertyResolver.getProperty("port")));
redisManager.setExpire(1800);// 配置缓存过期时间
redisManager.setTimeout(0);
// redisManager.setPassword(password);
return redisManager;
}
/**
* Session Manager
* 使用的是shiro-redis开源插件
*/
@Bean
public DefaultWebSessionManager sessionManager() {
DefaultWebSessionManager sessionManager = new DefaultWebSessionManager();
sessionManager.setSessionDAO(redisSessionDAO());
return sessionManager;
}
/**
* RedisSessionDAO shiro sessionDao层的实现 通过redis
* 使用的是shiro-redis开源插件
*/
@Bean
public RedisSessionDAO redisSessionDAO() {
RedisSessionDAO redisSessionDAO = new RedisSessionDAO();
redisSessionDAO.setRedisManager(redisManager());
return redisSessionDAO;
}
/**
* 限制同一账号登录同时登录人数控制
*
* @return
*/
@Bean
public KickoutSessionControlFilter kickoutSessionControlFilter() {
KickoutSessionControlFilter kickoutSessionControlFilter = new KickoutSessionControlFilter();
kickoutSessionControlFilter.setCacheManager(cacheManager());
kickoutSessionControlFilter.setSessionManager(sessionManager());
kickoutSessionControlFilter.setKickoutAfter(false);
kickoutSessionControlFilter.setMaxSession(1);
kickoutSessionControlFilter.setKickoutUrl("/kickout");
return kickoutSessionControlFilter;
}
/***
* 授权所用配置
*
* @return
*/
@Bean
public DefaultAdvisorAutoProxyCreator getDefaultAdvisorAutoProxyCreator() {
DefaultAdvisorAutoProxyCreator defaultAdvisorAutoProxyCreator = new DefaultAdvisorAutoProxyCreator();
defaultAdvisorAutoProxyCreator.setProxyTargetClass(true);
return defaultAdvisorAutoProxyCreator;
}
/***
* 使授权注解起作用不如不想配置可以在pom文件中加入
* <dependency>
*<groupId>org.springframework.boot</groupId>
*<artifactId>spring-boot-starter-aop</artifactId>
*</dependency>
* @param securityManager
* @return
*/
@Bean
public AuthorizationAttributeSourceAdvisor authorizationAttributeSourceAdvisor(SecurityManager securityManager){
AuthorizationAttributeSourceAdvisor authorizationAttributeSourceAdvisor = new AuthorizationAttributeSourceAdvisor();
authorizationAttributeSourceAdvisor.setSecurityManager(securityManager);
return authorizationAttributeSourceAdvisor;
}
/**
* Shiro生命周期处理器
*
*/
@Bean
public LifecycleBeanPostProcessor getLifecycleBea
没有合适的资源?快使用搜索试试~ 我知道了~
springboot+redis+shiro单点登录,统一异常处理,统一日志
共102个文件
class:37个
java:35个
html:10个
2星 需积分: 50 91 下载量 60 浏览量
2018-07-10
15:06:01
上传
评论 1
收藏 151KB ZIP 举报
温馨提示
springboot+redis+shiro单点登录,统一异常处理,统一日志,缓存
资源推荐
资源详情
资源评论
收起资源包目录
springboot+redis+shiro单点登录,统一异常处理,统一日志 (102个子文件)
ResultStatus.class 7KB
ShiroConfig.class 7KB
KickoutSessionControlFilter.class 6KB
DruidDataSourceConfig.class 5KB
CacheAspect.class 5KB
LogAspect.class 5KB
MyShiroRealm.class 4KB
LoginController.class 3KB
RedisConfig.class 3KB
JedisUtil.class 3KB
ValidatecodeServlet.class 3KB
BaseService.class 3KB
CaptchaValidateFilter.class 3KB
User.class 2KB
GlobalExceptionHandler.class 2KB
Swagger2.class 2KB
MyFormAuthenticationFilter.class 2KB
BaseResp.class 2KB
SpringContextUtil.class 2KB
SSOApplication$1.class 1KB
UserServiceImpl.class 1KB
MyBatisMapperScannerConfig.class 1KB
RedisConfig$1.class 1KB
SSOApplication.class 1KB
PageController.class 1KB
ApiErrorResponse.class 1KB
MyConfig.class 920B
RoleServiceImpl.class 901B
DruidStatViewServlet.class 825B
DruidStatFilter.class 652B
Cacheable.class 511B
CacheEvict.class 452B
MyMapper.class 344B
UserServiceI.class 338B
UserMapper.class 327B
RoleServiceI.class 270B
Role.class 267B
.classpath 1KB
mvnw.cmd 5KB
org.eclipse.wst.jsdt.ui.superType.container 49B
.gitignore 268B
login.html 1KB
login.html 1KB
index.html 669B
index.html 669B
404.html 459B
404.html 459B
401.html 455B
401.html 455B
kickout.html 376B
kickout.html 376B
maven-wrapper.jar 46KB
ShiroConfig.java 8KB
DruidDataSourceConfig.java 7KB
KickoutSessionControlFilter.java 6KB
CacheAspect.java 5KB
ResultStatus.java 4KB
LogAspect.java 3KB
MyShiroRealm.java 3KB
BaseService.java 3KB
ValidatecodeServlet.java 2KB
RedisConfig.java 2KB
CaptchaValidateFilter.java 2KB
LoginController.java 2KB
JedisUtil.java 2KB
SpringContextUtil.java 2KB
GlobalExceptionHandler.java 2KB
MyFormAuthenticationFilter.java 2KB
Swagger2.java 2KB
SSOApplication.java 1KB
UserServiceImpl.java 1KB
MyBatisMapperScannerConfig.java 1KB
BaseResp.java 1KB
DruidStatViewServlet.java 951B
MyConfig.java 850B
ApiErrorResponse.java 775B
PageController.java 766B
RoleServiceImpl.java 696B
UserServiceI.java 680B
User.java 517B
DruidStatFilter.java 505B
RoleServiceI.java 493B
UserMapper.java 435B
Cacheable.java 417B
CacheEvict.java 380B
MyMapper.java 313B
Role.java 276B
.jsdtscope 658B
mvnw 6KB
org.eclipse.wst.jsdt.ui.superType.name 6B
org.eclipse.jdt.core.prefs 736B
org.eclipse.core.resources.prefs 155B
org.eclipse.m2e.core.prefs 90B
.project 743B
maven-wrapper.properties 110B
pom.xml 6KB
mybatis-config.xml 3KB
mybatis-config.xml 3KB
mybatis-generator.xml 2KB
mybatis-generator.xml 2KB
共 102 条
- 1
- 2
资源评论
- zyg3453827082019-04-14很好,谢谢
- z1450712020-06-05卵用没有,还死贵,C
- starry-night2018-07-12没用,真没用
budadota2
- 粉丝: 1
- 资源: 4
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功