From 332b5be61fc117566153e8fb7f706c09b8933d8c Mon Sep 17 00:00:00 2001 From: thinkgem Date: Fri, 12 Jan 2018 22:16:17 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E6=AD=A3Shiro=E8=BF=87=E6=BB=A4?= =?UTF-8?q?=E5=99=A8=E9=87=8D=E5=A4=8D=E5=8A=A0=E8=BD=BD=E5=8F=8A=E5=8A=A0?= =?UTF-8?q?=E8=BD=BD=E9=A1=BA=E5=BA=8F=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../common/shiro/filter/LogoutFilter.java | 59 +++++---- .../filter/RolesAuthorizationFilter.java | 6 +- .../{spring => common}/ShiroConfig.java | 118 +++++++++++------- .../com/jeesite/modules/db/InitCoreData.xlsx | Bin 173237 -> 173406 bytes .../java/com/jeesite/config/Application.java | 2 + .../com/jeesite/config/web/FilterConfig.java | 32 ++--- .../jeesite/config/web/ListenerConfig.java | 18 +-- web/src/main/resources/application.yml | 11 +- 8 files changed, 125 insertions(+), 121 deletions(-) rename modules/core/src/main/java/com/jeesite/config/{spring => common}/ShiroConfig.java (57%) diff --git a/modules/core/src/main/java/com/jeesite/common/shiro/filter/LogoutFilter.java b/modules/core/src/main/java/com/jeesite/common/shiro/filter/LogoutFilter.java index aa9dd002..9e5804bf 100644 --- a/modules/core/src/main/java/com/jeesite/common/shiro/filter/LogoutFilter.java +++ b/modules/core/src/main/java/com/jeesite/common/shiro/filter/LogoutFilter.java @@ -29,31 +29,30 @@ public class LogoutFilter extends org.apache.shiro.web.filter.authc.LogoutFilter @Override protected boolean preHandle(ServletRequest request, ServletResponse response) throws Exception { - return super.preHandle(request, response); -// try{ -// Subject subject = getSubject(request, response); -// String redirectUrl = getRedirectUrl(request, response, subject); -// //try/catch added for SHIRO-298: -// try { -// // 记录用户退出日志 -// LogUtils.saveLog(ServletUtils.getRequest(), "系统退出"); -// // 退出登录 -// subject.logout(); -// } catch (SessionException ise) { -// log.debug("Encountered session exception during logout. This can generally safely be ignored.", ise); -// } -// -// // 如果是Ajax请求,返回Json字符串。 -// if (ServletUtils.isAjaxRequest((HttpServletRequest)request)){ -// ServletUtils.renderResult((HttpServletResponse)response, Global.TRUE, "退出成功!"); -// return false; -// } -// -// issueRedirect(request, response, redirectUrl); -// }catch(Exception e){ -// log.debug("Encountered session exception during logout. This can generally safely be ignored.", e); -// } -// return false; + try{ + Subject subject = getSubject(request, response); + String redirectUrl = getRedirectUrl(request, response, subject); + //try/catch added for SHIRO-298: + try { + // 记录用户退出日志 + LogUtils.saveLog(ServletUtils.getRequest(), "系统退出"); + // 退出登录 + subject.logout(); + } catch (SessionException ise) { + log.debug("Encountered session exception during logout. This can generally safely be ignored.", ise); + } + + // 如果是Ajax请求,返回Json字符串。 + if (ServletUtils.isAjaxRequest((HttpServletRequest)request)){ + ServletUtils.renderResult((HttpServletResponse)response, Global.TRUE, "退出成功!"); + return false; + } + + issueRedirect(request, response, redirectUrl); + }catch(Exception e){ + log.debug("Encountered session exception during logout. This can generally safely be ignored.", e); + } + return false; } /** @@ -61,12 +60,12 @@ public class LogoutFilter extends org.apache.shiro.web.filter.authc.LogoutFilter */ @Override protected String getRedirectUrl(ServletRequest request, ServletResponse response, Subject subject) { + String url = Global.getProperty("shiro.logoutUrl"); + // 如果配置了登出之后跳转的url,并且url不能为 ${adminPath}/logout 否则会造成死循环。 + if (StringUtils.isNoneBlank(url) && !url.equals((Global.getAdminPath()+"/logout"))){ + return url; + } return super.getRedirectUrl(request, response, subject); -// String url = Global.getProperty("shiro.logoutUrl"); -// // 如果配置了登出之后跳转的url,并且url不能为 ${adminPath}/logout 否则会造成死循环。 -// if (StringUtils.isNoneBlank(url) && !url.equals((Global.getAdminPath()+"/logout"))){ -// return url; -// } } } diff --git a/modules/core/src/main/java/com/jeesite/common/shiro/filter/RolesAuthorizationFilter.java b/modules/core/src/main/java/com/jeesite/common/shiro/filter/RolesAuthorizationFilter.java index 1d136ba9..1ea4272f 100644 --- a/modules/core/src/main/java/com/jeesite/common/shiro/filter/RolesAuthorizationFilter.java +++ b/modules/core/src/main/java/com/jeesite/common/shiro/filter/RolesAuthorizationFilter.java @@ -17,14 +17,12 @@ public class RolesAuthorizationFilter extends org.apache.shiro.web.filter.authz. @Override protected void redirectToLogin(ServletRequest request, ServletResponse response) throws IOException { - super.redirectToLogin(request, response); -// PermissionsAuthorizationFilter.redirectToDefaultPath(request, response); + PermissionsAuthorizationFilter.redirectToDefaultPath(request, response); } @Override protected boolean onAccessDenied(ServletRequest request, ServletResponse response) throws IOException { - return super.onAccessDenied(request, response); -// return PermissionsAuthorizationFilter.redirectTo403Page(request, response); + return PermissionsAuthorizationFilter.redirectTo403Page(request, response); } } diff --git a/modules/core/src/main/java/com/jeesite/config/spring/ShiroConfig.java b/modules/core/src/main/java/com/jeesite/config/common/ShiroConfig.java similarity index 57% rename from modules/core/src/main/java/com/jeesite/config/spring/ShiroConfig.java rename to modules/core/src/main/java/com/jeesite/config/common/ShiroConfig.java index b3562933..d2c652da 100644 --- a/modules/core/src/main/java/com/jeesite/config/spring/ShiroConfig.java +++ b/modules/core/src/main/java/com/jeesite/config/common/ShiroConfig.java @@ -1,7 +1,7 @@ /** * Copyright (c) 2013-Now http://jeesite.com All rights reserved. */ -package com.jeesite.config.spring; +package com.jeesite.config.common; import java.util.Map; @@ -21,7 +21,9 @@ import com.jeesite.common.shiro.cas.CasOutHandler; import com.jeesite.common.shiro.config.FilterChainDefinitionMap; import com.jeesite.common.shiro.filter.CasAuthenticationFilter; import com.jeesite.common.shiro.filter.FormAuthenticationFilter; +import com.jeesite.common.shiro.filter.LogoutFilter; import com.jeesite.common.shiro.filter.PermissionsAuthorizationFilter; +import com.jeesite.common.shiro.filter.RolesAuthorizationFilter; import com.jeesite.common.shiro.filter.UserFilter; import com.jeesite.common.shiro.realm.AuthorizingRealm; import com.jeesite.common.shiro.session.SessionDAO; @@ -68,8 +70,7 @@ public class ShiroConfig { /** * CAS登录过滤器 */ - @Bean - public CasAuthenticationFilter shiroCasFilter(AuthorizingRealm authorizingRealm) { + private CasAuthenticationFilter shiroCasFilter(AuthorizingRealm authorizingRealm) { CasAuthenticationFilter bean = new CasAuthenticationFilter(); bean.setAuthorizingRealm(authorizingRealm); return bean; @@ -78,78 +79,61 @@ public class ShiroConfig { /** * Form登录过滤器 */ - @Bean - public FormAuthenticationFilter shiroAuthcFilter(AuthorizingRealm authorizingRealm) { + private FormAuthenticationFilter shiroAuthcFilter(AuthorizingRealm authorizingRealm) { FormAuthenticationFilter bean = new FormAuthenticationFilter(); bean.setAuthorizingRealm(authorizingRealm); return bean; } -// /** -// * 登出过滤器 -// */ -// @Bean -// public LogoutFilter shiroLogoutFilter() { -// return new LogoutFilter(); -// } + /** + * 登出过滤器 + */ + private LogoutFilter shiroLogoutFilter() { + return new LogoutFilter(); + } /** * 权限字符串过滤器 */ - @Bean - public PermissionsAuthorizationFilter shiroPermsFilter() { + private PermissionsAuthorizationFilter shiroPermsFilter() { return new PermissionsAuthorizationFilter(); } -// /** -// * 角色权限过滤器 -// */ -// @Bean -// public RolesAuthorizationFilter shiroRolesFilter() { -// return new RolesAuthorizationFilter(); -// } + /** + * 角色权限过滤器 + */ + private RolesAuthorizationFilter shiroRolesFilter() { + return new RolesAuthorizationFilter(); + } /** * 用户权限过滤器 */ - @Bean - public UserFilter shiroUserFilter() { + private UserFilter shiroUserFilter() { return new UserFilter(); } - /** - * URL过滤定义 - */ - @Bean - public FilterChainDefinitionMap shiroFilterChainDefinitionMap() { - FilterChainDefinitionMap bean = new FilterChainDefinitionMap(); - bean.setFilterChainDefinitions(Global.getProperty("shiro.filterChainDefinitions")); - bean.setDefaultFilterChainDefinitions(Global.getProperty("shiro.defaultFilterChainDefinitions")); - return bean; - } - /** * Shiro认证过滤器 */ @Bean - public ShiroFilterFactoryBean shiroFilter(WebSecurityManager securityManager, CasAuthenticationFilter shiroCasFilter, - FormAuthenticationFilter shiroAuthcFilter, -// LogoutFilter shiroLogoutFilter, - PermissionsAuthorizationFilter shiroPermsFilter, -// RolesAuthorizationFilter shiroRolesFilter, - UserFilter shiroUserFilter, FilterChainDefinitionMap shiroFilterChainDefinitionMap) { + public ShiroFilterFactoryBean shiroFilter(WebSecurityManager securityManager, + AuthorizingRealm authorizingRealm) { ShiroFilterFactoryBean bean = new ShiroFilterFactoryBean(); bean.setSecurityManager(securityManager); bean.setLoginUrl(Global.getProperty("shiro.loginUrl")); bean.setSuccessUrl(Global.getProperty("shiro.successUrl")); Map filters = bean.getFilters(); - filters.put("cas", shiroCasFilter); - filters.put("authc", shiroAuthcFilter); -// filters.put("logout", shiroLogoutFilter); - filters.put("perms", shiroPermsFilter); -// filters.put("roles", shiroRolesFilter); - filters.put("user", shiroUserFilter); - bean.setFilterChainDefinitionMap(shiroFilterChainDefinitionMap.getObject()); + filters.put("cas", shiroCasFilter(authorizingRealm)); + filters.put("authc", shiroAuthcFilter(authorizingRealm)); + filters.put("logout", shiroLogoutFilter()); + filters.put("perms", shiroPermsFilter()); + filters.put("roles", shiroRolesFilter()); + filters.put("user", shiroUserFilter()); + FilterChainDefinitionMap chains = new FilterChainDefinitionMap(); + chains.setFilterChainDefinitions(Global.getProperty("shiro.filterChainDefinitions")); + chains.setDefaultFilterChainDefinitions(Global.getProperty("shiro.defaultFilterChainDefinitions")); + bean.setFilterChainDefinitionMap(chains.getObject()); return bean; } @@ -167,4 +151,44 @@ public class ShiroConfig { return bean; } + /** + * Shiro 生命周期处理器,实现初始化和销毁回调 + */ + @Bean(name="lifecycleBeanPostProcessor") + public LifecycleBeanPostProcessor lifecycleBeanPostProcessor() { + return new LifecycleBeanPostProcessor(); + } + + /** + * Shiro 过滤器代理配置 + */ + @Bean + @DependsOn({ "lifecycleBeanPostProcessor" }) + public DefaultAdvisorAutoProxyCreator defaultAdvisorAutoProxyCreator() { + DefaultAdvisorAutoProxyCreator bean = new DefaultAdvisorAutoProxyCreator(); + bean.setProxyTargetClass(true); + return bean; + } + + /** + * 启用Shrio授权注解拦截方式,AOP式方法级权限检查 + */ + @Bean + public AuthorizationAttributeSourceAdvisor authorizationAttributeSourceAdvisor(WebSecurityManager securityManager) { + AuthorizationAttributeSourceAdvisor bean = new AuthorizationAttributeSourceAdvisor(); + bean.setSecurityManager(securityManager); + return bean; + } + +// /** +// * 在方法中 注入 securityManager 进行代理控制 +// */ +// @Bean +// public MethodInvokingFactoryBean methodInvokingFactoryBean(DefaultWebSecurityManager securityManager) { +// MethodInvokingFactoryBean bean = new MethodInvokingFactoryBean(); +// bean.setStaticMethod("org.apache.shiro.SecurityUtils.setSecurityManager"); +// bean.setArguments(new Object[] { securityManager }); +// return bean; +// } + } diff --git a/modules/core/src/main/java/com/jeesite/modules/db/InitCoreData.xlsx b/modules/core/src/main/java/com/jeesite/modules/db/InitCoreData.xlsx index bbb12e75b20fcd793e07b44b31f865428040a29f..00d7715d9cd51c685b6a0cbb41714e515b03dac3 100644 GIT binary patch delta 43691 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 BFiije delta 43472 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%0AVmZ&wb`z1 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

=aB1e<&2`WM;1ny|$WO5E))Z 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 M3WDb-Pyo*V1A6VO^Z)<= diff --git a/web/src/main/java/com/jeesite/config/Application.java b/web/src/main/java/com/jeesite/config/Application.java index 4b3b19d6..86678a0e 100644 --- a/web/src/main/java/com/jeesite/config/Application.java +++ b/web/src/main/java/com/jeesite/config/Application.java @@ -7,6 +7,7 @@ import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.boot.builder.SpringApplicationBuilder; import org.springframework.boot.web.support.SpringBootServletInitializer; +import org.springframework.context.annotation.Profile; import com.jeesite.common.io.PropertiesUtils; @@ -15,6 +16,7 @@ import com.jeesite.common.io.PropertiesUtils; * @author ThinkGem * @version 2018-1-8 */ +@Profile("default") @SpringBootApplication(scanBasePackages={"com.jeesite.config"}) public class Application extends SpringBootServletInitializer { diff --git a/web/src/main/java/com/jeesite/config/web/FilterConfig.java b/web/src/main/java/com/jeesite/config/web/FilterConfig.java index 16bf0880..309cf14c 100644 --- a/web/src/main/java/com/jeesite/config/web/FilterConfig.java +++ b/web/src/main/java/com/jeesite/config/web/FilterConfig.java @@ -3,17 +3,19 @@ */ package com.jeesite.config.web; +import javax.servlet.Filter; + import org.apache.commons.lang3.StringUtils; import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; import org.springframework.boot.web.servlet.FilterRegistrationBean; import org.springframework.cache.ehcache.EhCacheManagerFactoryBean; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; +import org.springframework.core.annotation.Order; import org.springframework.web.filter.CharacterEncodingFilter; -import org.springframework.web.filter.DelegatingFilterProxy; -import org.springframework.web.filter.RequestContextFilter; import com.jeesite.common.config.Global; +import com.jeesite.common.shiro.web.ShiroFilterFactoryBean; import com.jeesite.common.web.PageCachingFilter; /** @@ -28,13 +30,13 @@ public class FilterConfig { * Encoding Filter */ @Bean + @Order(1000) public FilterRegistrationBean characterEncodingFilter() { FilterRegistrationBean bean = new FilterRegistrationBean(); bean.setFilter(new CharacterEncodingFilter()); bean.addInitParameter("encoding", "UTF-8"); bean.addInitParameter("forceEncoding", "true"); bean.addUrlPatterns("/*"); - bean.setOrder(1000); return bean; } @@ -42,6 +44,7 @@ public class FilterConfig { * PageCache Filter, cache .html suffix. */ @Bean + @Order(2000) @ConditionalOnProperty(name = "ehcache.pageCaching.enabled", havingValue = "true") public FilterRegistrationBean pageCachingFilter(EhCacheManagerFactoryBean ehCacheManager) { FilterRegistrationBean bean = new FilterRegistrationBean(); @@ -51,33 +54,20 @@ public class FilterConfig { bean.addInitParameter("cacheName", "pageCachingFilter"); bean.addUrlPatterns(StringUtils.split(Global.getProperty( "ehcache.pageCaching.urlPatterns"), ",")); - bean.setOrder(2000); return bean; } /** * Apache Shiro Filter + * @throws Exception */ @Bean - public FilterRegistrationBean shiroFilterProxy() { + @Order(3000) + public FilterRegistrationBean shiroFilterProxy(ShiroFilterFactoryBean shiroFilter) throws Exception { FilterRegistrationBean bean = new FilterRegistrationBean(); - bean.setFilter(new DelegatingFilterProxy("shiroFilter")); - bean.addInitParameter("targetFilterLifecycle", "true"); + bean.setFilter((Filter) shiroFilter.getInstance()); bean.addUrlPatterns("/*"); - bean.setOrder(3000); return bean; } - - /** - * Request Context Filter 需要放在shiroFilter后,否则request获取不到session - */ - @Bean - public FilterRegistrationBean requestContextFilter() { - FilterRegistrationBean bean = new FilterRegistrationBean(); - bean.setFilter(new RequestContextFilter()); - bean.addUrlPatterns("/*"); - bean.setOrder(4000); - return bean; - } - + } diff --git a/web/src/main/java/com/jeesite/config/web/ListenerConfig.java b/web/src/main/java/com/jeesite/config/web/ListenerConfig.java index b61cd616..09173d16 100644 --- a/web/src/main/java/com/jeesite/config/web/ListenerConfig.java +++ b/web/src/main/java/com/jeesite/config/web/ListenerConfig.java @@ -6,10 +6,9 @@ package com.jeesite.config.web; import org.springframework.boot.web.servlet.ServletListenerRegistrationBean; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; +import org.springframework.core.annotation.Order; import org.springframework.web.context.request.RequestContextListener; -import com.jeesite.common.shiro.cas.CasOutSessionListener; - /** * Listener 配置 * @author ThinkGem @@ -17,26 +16,15 @@ import com.jeesite.common.shiro.cas.CasOutSessionListener; */ @Configuration public class ListenerConfig { - - /** - * CAS Session Listener - */ - @Bean - public ServletListenerRegistrationBean casOutSessionListener() { - ServletListenerRegistrationBean bean = new ServletListenerRegistrationBean<>(); - bean.setListener(new CasOutSessionListener()); - bean.setOrder(1000); - return bean; - } - + /** * Request Context Listener */ @Bean + @Order(1000) public ServletListenerRegistrationBean requestContextListener() { ServletListenerRegistrationBean bean = new ServletListenerRegistrationBean<>(); bean.setListener(new RequestContextListener()); - bean.setOrder(2000); return bean; } diff --git a/web/src/main/resources/application.yml b/web/src/main/resources/application.yml index abc6af57..7007eeba 100644 --- a/web/src/main/resources/application.yml +++ b/web/src/main/resources/application.yml @@ -1,3 +1,10 @@ +spring: + + profiles: + active: default + + main: + banner-mode: "off" server: @@ -6,10 +13,6 @@ server: tomcat: uri-encoding: UTF-8 -spring: - main: - banner-mode: "off" - debug: true