//package com.project.shiro.config; // //import com.project.shiro.util.AuthenticationFilter; //import com.project.shiro.util.AuthenticationRealm; //import com.project.shiro.util.AuthorizationFilter; //import com.project.shiro.util.redis.ShiroRedisCacheManager; //import com.project.shiro.util.redis.ShiroRedisSessionDAO; //import org.apache.shiro.session.mgt.SessionManager; //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.servlet.SimpleCookie; //import org.apache.shiro.web.session.mgt.DefaultWebSessionManager; //import org.slf4j.Logger; //import org.slf4j.LoggerFactory; //import org.springframework.aop.framework.autoproxy.DefaultAdvisorAutoProxyCreator; //import org.springframework.context.annotation.Bean; //import org.springframework.context.annotation.Configuration; //import org.springframework.context.annotation.DependsOn; // //import javax.servlet.Filter; //import java.util.HashMap; //import java.util.LinkedHashMap; //import java.util.Map; // ///** // * Description: shiro配置类 // * User: mxy // * Date: 2019-04-16 // */ //@Configuration //public class ShiroConfig { // // private static final transient Logger logger = LoggerFactory.getLogger(ShiroConfig.class); // // /** // * 配置拦截器 // * <p> // * 定义拦截URL权限,优先级从上到下 // * 1). anon : 匿名访问,无需登录 // * 2). authc : 登录后才能访问 // * 3). logout: 登出 // * 4). frameperms : 自定义的过滤器 // * <p> // * URL 匹配风格 // * 1). ?:匹配一个字符,如 /admin? 将匹配 /admin1,但不匹配 /admin 或 /admin/; // * 2). *:匹配零个或多个字符串,如 /admin* 将匹配 /admin 或/admin123,但不匹配 /admin/1; // * 3). **:匹配路径中的零个或多个路径,如 /admin/** 将匹配 /admin/a 或 /admin/a/b // * <p> // * 配置身份验证成功,失败的跳转路径 // */ // @Bean // public ShiroFilterFactoryBean shiroFilter(DefaultWebSecurityManager securityManager) { // logger.info("进入Shiro拦截工厂"); // ShiroFilterFactoryBean shiroFilterFactoryBean = new ShiroFilterFactoryBean(); // // 设置securityManager // shiroFilterFactoryBean.setSecurityManager(securityManager); // // // 自定义的过滤器 // Map<String, Filter> filterMap = new HashMap<>(); // // map里面key值要为过滤器的名称,value为过滤器对象 // filterMap.put("authc", authenticationFilter()); // filterMap.put("frameperms", authorizationFilter()); // // 将自定义的过滤器加入到过滤器集合中 // shiroFilterFactoryBean.setFilters(filterMap); // // // 设置拦截器集合 // Map<String, String> filterChainDefinitionMap = new LinkedHashMap<String, String>(); // filterChainDefinitionMap.put("/admin/", "anon"); // 后台资源-匿名访问 // filterChainDefinitionMap.put("/admin/res/**", "anon"); // 静态资源-匿名访问 // filterChainDefinitionMap.put("/admin/anon/**", "anon"); // 后台可匿名访问资源-匿名访问 // filterChainDefinitionMap.put("/admin/login", "authc"); // 登录页面-身份认证 // filterChainDefinitionMap.put("/admin/logout", "logout"); // 用户退出,只需配置logout即可实现该功能 // filterChainDefinitionMap.put("/admin/common/**", "anon"); // 其他路径均需要身份认证,一般位于最下面,优先级最低 // filterChainDefinitionMap.put("/admin/**", "authc,frameperms"); // 其他路径均需要身份认证,一般位于最下面,优先级最低 // // // 设置拦截器 // shiroFilterFactoryBean.setFilterChainDefinitionMap(filterChainDefinitionMap); // shiroFilterFactoryBean.setLoginUrl("/admin/login"); // 登录的路径 //// shiroFilterFactoryBean.setUnauthorizedUrl("/admin/common/unauthorized.jhtml"); // 验证失败后跳转的路径 // logger.info("Shiro拦截工厂配置完成"); // return shiroFilterFactoryBean; // } // // /** // * 配置Shiro生命周期处理器 // */ // @Bean // public LifecycleBeanPostProcessor lifecycleBeanPostProcessor() { // return new LifecycleBeanPostProcessor(); // } // // /** // * 自动创建代理类,若不添加,Shiro的注解可能不会生效。 // */ // @Bean // @DependsOn({"lifecycleBeanPostProcessor"}) // public DefaultAdvisorAutoProxyCreator advisorAutoProxyCreator() { // DefaultAdvisorAutoProxyCreator advisorAutoProxyCreator = new DefaultAdvisorAutoProxyCreator(); // advisorAutoProxyCreator.setProxyTargetClass(true); // return advisorAutoProxyCreator; // } // // /** // * 开启Shiro的注解 // */ // @Bean // public AuthorizationAttributeSourceAdvisor authorizationAttributeSourceAdvisor() { // AuthorizationAttributeSourceAdvisor authorizationAttributeSourceAdvisor = new AuthorizationAttributeSourceAdvisor(); // authorizationAttributeSourceAdvisor.setSecurityManager(securityManager()); // return authorizationAttributeSourceAdvisor; // } // // /** // * 配置加密匹配,使用MD5的方式,进行1024次加密 // */ //// @Bean //// public HashedCredentialsMatcher hashedCredentialsMatcher() { //// HashedCredentialsMatcher hashedCredentialsMatcher = new HashedCredentialsMatcher(); //// hashedCredentialsMatcher.setHashAlgorithmName("MD5"); //// hashedCredentialsMatcher.setHashIterations(1024); //// return hashedCredentialsMatcher; //// } // // /** // * SecurityManager 安全管理器;Shiro的核心 // */ // @Bean // public DefaultWebSecurityManager securityManager() { // DefaultWebSecurityManager securityManager = new DefaultWebSecurityManager(); // // 自定义的Realm // securityManager.setRealm(authenticationShiroRealm()); // // 缓存管理 // securityManager.setCacheManager(shiroRedisCacheManager()); // // 会话管理 // securityManager.setSessionManager(sessionManager()); // return securityManager; // } // // /** // * 自定义Realm,可以多个 // */ // @Bean // public AuthenticationRealm authenticationShiroRealm() { // AuthenticationRealm authenticationRealm = new AuthenticationRealm(); // //authenticationRealm.setCredentialsMatcher(hashedCredentialsMatcher()); // return authenticationRealm; // } // // /** // * redis缓存管理 // */ // @Bean // public ShiroRedisCacheManager shiroRedisCacheManager() { // return new ShiroRedisCacheManager(); // } // // /** // * 设置session会话管理者 // */ // @Bean // public SessionManager sessionManager() { // DefaultWebSessionManager defaultWebSessionManager = new DefaultWebSessionManager(); // defaultWebSessionManager.setSessionIdCookie(simpleCookie()); // defaultWebSessionManager.setSessionDAO(shiroRedisSessionDAO()); // return defaultWebSessionManager; // } // // /** // * session管理 // */ // @Bean // public ShiroRedisSessionDAO shiroRedisSessionDAO() { // return new ShiroRedisSessionDAO(); // } // // /** // * 这里需要设置一个cookie的名称 原因就是会跟原来的session的id值重复的 // */ // @Bean // public SimpleCookie simpleCookie() { // return new SimpleCookie("SHAREJSESSIONID"); // } // // // @Bean // public AuthenticationFilter authenticationFilter() { // return new AuthenticationFilter(); // } // // @Bean // public AuthorizationFilter authorizationFilter() { // return new AuthorizationFilter(); // } // //}