123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110 |
- package com.fdkankan.web.config;
- import com.fdkankan.common.constant.LoginType;
- import com.fdkankan.web.realm.AppJwtRealm;
- import com.fdkankan.web.realm.ManagerJwtRealm;
- import com.fdkankan.web.realm.UserJwtRealm;
- import com.fdkankan.web.constant.FilterConstant;
- import com.fdkankan.web.jwt.JwtFilter;
- import com.fdkankan.web.realm.AgentJwtRealm;
- import java.util.ArrayList;
- import java.util.HashMap;
- import java.util.LinkedHashMap;
- import java.util.List;
- import java.util.Map;
- import javax.servlet.Filter;
- import org.apache.shiro.authc.pam.AtLeastOneSuccessfulStrategy;
- import org.apache.shiro.authc.pam.ModularRealmAuthenticator;
- import org.apache.shiro.mgt.DefaultSessionStorageEvaluator;
- import org.apache.shiro.mgt.DefaultSubjectDAO;
- import org.apache.shiro.mgt.SecurityManager;
- import org.apache.shiro.realm.Realm;
- import org.apache.shiro.spring.web.ShiroFilterFactoryBean;
- import org.apache.shiro.web.mgt.DefaultWebSecurityManager;
- import org.springframework.beans.factory.annotation.Autowired;
- import org.springframework.context.annotation.Bean;
- import org.springframework.context.annotation.Configuration;
- @Configuration
- public class ShiroConfig {
- @Autowired
- ModularRealmAuthenticator modularRealmAuthenticator;
- @Autowired
- private UserJwtRealm userJwtRealm;
- @Autowired
- private AgentJwtRealm agentJwtRealm;
- @Autowired
- private ManagerJwtRealm managerJwtRealm;
- @Autowired
- private AppJwtRealm appJwtRealm;
- @Bean("shiroFilter")
- public ShiroFilterFactoryBean shiroFilter(SecurityManager securityManager) {
- ShiroFilterFactoryBean shiroFilterFactoryBean = new ShiroFilterFactoryBean();
- shiroFilterFactoryBean.setSecurityManager(securityManager);
- //拦截器
- Map<String, String> filterChainDefinitionMap = new LinkedHashMap<String, String>();
- // 配置不会被拦截的链接 顺序判断
- // filterChainDefinitionMap.put("/**", "anon");
- // 添加自己的过滤器并且取名为jwt
- Map<String, Filter> filterMap = new HashMap<String, Filter>(1);
- filterMap.put("user_jwt", new JwtFilter(LoginType.USER.code()));
- filterMap.put("manager_jwt", new JwtFilter(LoginType.MANAGER.code()));
- filterMap.put("agent_jwt", new JwtFilter(LoginType.AGENT.code()));
- filterMap.put("app_jwt", new JwtFilter(LoginType.APP.code()));
- shiroFilterFactoryBean.setFilters(filterMap);
- //<!-- 过滤链定义,从上向下顺序执行,一般将/**放在最为下边
- filterChainDefinitionMap.put(FilterConstant.FILTER_USER_URL + "/**", "user_jwt");
- filterChainDefinitionMap.put(FilterConstant.FILTER_SCENE_URL + "/**", "user_jwt");
- filterChainDefinitionMap.put(FilterConstant.FILTER_DEVICE_URL + "/**", "user_jwt");
- filterChainDefinitionMap.put(FilterConstant.FILTER_PAY_URL + "/**", "user_jwt");
- filterChainDefinitionMap.put(FilterConstant.FILTER_MANAGER_URL + "/**", "manager_jwt");
- filterChainDefinitionMap.put(FilterConstant.FILTER_AGENT_URL + "/**", "agent_jwt");
- filterChainDefinitionMap.put(FilterConstant.FILTER_APP_URL + "/**", "app_jwt");
- //未授权界面;
- shiroFilterFactoryBean.setUnauthorizedUrl("/403");
- shiroFilterFactoryBean.setFilterChainDefinitionMap(filterChainDefinitionMap);
- return shiroFilterFactoryBean;
- }
- @Bean("securityManager")
- public SecurityManager securityManager() {
- List<Realm> realms = new ArrayList<>();
- realms.add(userJwtRealm);
- realms.add(agentJwtRealm);
- realms.add(managerJwtRealm);
- realms.add(appJwtRealm);
- DefaultWebSecurityManager securityManager = new DefaultWebSecurityManager();
- //设置realm.
- securityManager.setAuthenticator(modularRealmAuthenticator);
- securityManager.setRealms(realms);
- /*
- * 关闭shiro自带的session,详情见文档
- * http://shiro.apache.org/session-management.html#SessionManagement-StatelessApplications%28Sessionless%29
- */
- DefaultSubjectDAO subjectDAO = new DefaultSubjectDAO();
- DefaultSessionStorageEvaluator defaultSessionStorageEvaluator = new DefaultSessionStorageEvaluator();
- defaultSessionStorageEvaluator.setSessionStorageEnabled(false);
- subjectDAO.setSessionStorageEvaluator(defaultSessionStorageEvaluator);
- securityManager.setSubjectDAO(subjectDAO);
- return securityManager;
- }
- @Bean
- public ModularRealmAuthenticator modularRealmAuthenticator(){
- //自己重写的ShiroModularRealmAuthenticator
- ShiroModularRealmAuthenticator modularRealmAuthenticator = new ShiroModularRealmAuthenticator();
- modularRealmAuthenticator.setAuthenticationStrategy(new AtLeastOneSuccessfulStrategy());
- return modularRealmAuthenticator;
- }
- }
|