Newer
Older
casic-smartcity / casic-web / src / main / java / com / casic / missiles / config / ShiroConfigs.java
chaizhuang on 1 Dec 2022 8 KB knife4配置,ShiroConfig
package com.casic.missiles.config;
//
// Source code recreated from a .class file by IntelliJ IDEA
// (powered by Fernflower decompiler)
//


import com.casic.missiles.config.properties.CasicProperties;
import com.casic.missiles.core.filter.UserLoginFilter;
import com.casic.missiles.core.listener.ShiroSessionListener;
import com.casic.missiles.core.shiro.ShiroDbRealm;
import com.casic.missiles.core.shiro.ShiroSessionManager;
import com.casic.missiles.core.shiro.dao.RedisSessionDao;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
import javax.servlet.Filter;
import org.apache.shiro.cache.CacheManager;
import org.apache.shiro.codec.Base64;
import org.apache.shiro.session.SessionListener;
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.CookieRememberMeManager;
import org.apache.shiro.web.mgt.DefaultWebSecurityManager;
import org.apache.shiro.web.servlet.Cookie;
import org.apache.shiro.web.servlet.SimpleCookie;
import org.apache.shiro.web.session.mgt.DefaultWebSessionManager;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.beans.factory.config.MethodInvokingFactoryBean;
import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.DependsOn;
import org.springframework.data.redis.core.RedisTemplate;

@Configuration
@DependsOn({"springContextHolder"})
public class ShiroConfigs {
    public ShiroConfigs() {
    }

    @Bean
    public DefaultWebSecurityManager securityManager(CacheManager cacheShiroManager, SessionManager sessionManager) {
        DefaultWebSecurityManager securityManager = new DefaultWebSecurityManager();
        securityManager.setRealm(this.shiroDbRealm());
        securityManager.setCacheManager(cacheShiroManager);
        securityManager.setSessionManager(sessionManager);
        return securityManager;
    }

    @Bean
    @ConditionalOnProperty(
            prefix = "casic",
            name = {"spring-session-open"},
            havingValue = "true"
    )
    public DefaultWebSessionManager servletContainerSessionManager(@Autowired(required = false) RedisTemplate redisTemplate, CasicProperties casicProperties, SessionListener sessionListener, @Value("${spring.redis.redisValueSerializer:org.springframework.data.redis.serializer.StringRedisSerializer}") String redisValueSerializer) {
        DefaultWebSessionManager sessionManager = new ShiroSessionManager();
        sessionManager.setSessionDAO(new RedisSessionDao((long)(casicProperties.getSessionInvalidateTime() * 1000), redisTemplate, redisValueSerializer));
        sessionManager.setSessionValidationInterval((long)(casicProperties.getSessionValidationInterval() * 1000));
        sessionManager.setGlobalSessionTimeout((long)(casicProperties.getSessionInvalidateTime() * 1000));
        sessionManager.setDeleteInvalidSessions(true);
        sessionManager.setSessionValidationSchedulerEnabled(true);
        Cookie cookie = new SimpleCookie("JSESSIONID");
        cookie.setName("shiroCookie");
        cookie.setHttpOnly(true);
        sessionManager.setSessionIdCookie(cookie);
        List<SessionListener> listeners = new ArrayList();
        listeners.add(sessionListener);
        sessionManager.setSessionListeners(listeners);
        return sessionManager;
    }

    @Bean
    @ConditionalOnProperty(
            prefix = "casic",
            name = {"spring-session-open"},
            havingValue = "false"
    )
    public DefaultWebSessionManager defaultWebSessionManager(CacheManager cacheShiroManager, CasicProperties CasicProperties, SessionListener sessionListener) {
        DefaultWebSessionManager sessionManager = new ShiroSessionManager();
        sessionManager.setCacheManager(cacheShiroManager);
        sessionManager.setSessionValidationInterval((long)(CasicProperties.getSessionValidationInterval() * 1000));
        sessionManager.setGlobalSessionTimeout((long)(CasicProperties.getSessionInvalidateTime() * 1000));
        sessionManager.setDeleteInvalidSessions(true);
        sessionManager.setSessionValidationSchedulerEnabled(true);
        Cookie cookie = new SimpleCookie("JSESSIONID");
        cookie.setName("shiroCookie");
        cookie.setHttpOnly(true);
        sessionManager.setSessionIdCookie(cookie);
        List<SessionListener> listeners = new ArrayList();
        listeners.add(sessionListener);
        sessionManager.setSessionListeners(listeners);
        return sessionManager;
    }

    @Bean
    public SessionListener defaultSessionListener() {
        return new ShiroSessionListener();
    }

    @Bean
    public ShiroDbRealm shiroDbRealm() {
        return new ShiroDbRealm();
    }

    @Bean
    public CookieRememberMeManager rememberMeManager(SimpleCookie rememberMeCookie) {
        CookieRememberMeManager manager = new CookieRememberMeManager();
        manager.setCipherKey(Base64.decode("Z3VucwAAAAAAAAAAAAAAAA=="));
        manager.setCookie(rememberMeCookie);
        return manager;
    }

    @Bean
    public SimpleCookie rememberMeCookie() {
        SimpleCookie simpleCookie = new SimpleCookie("rememberMe");
        simpleCookie.setHttpOnly(true);
        simpleCookie.setMaxAge(604800);
        return simpleCookie;
    }

    @Bean
    public ShiroFilterFactoryBean shiroFilter(DefaultWebSecurityManager securityManager, CasicProperties CasicProperties) {
        LoggerFactory.getLogger(this.getClass()).info("bili bili!! Talk is cheap,Show me the code!");
        ShiroFilterFactoryBean shiroFilter = new ShiroFilterFactoryBean();
        shiroFilter.setSecurityManager(securityManager);
        shiroFilter.setLoginUrl("/sys/user/login");
        shiroFilter.setSuccessUrl(CasicProperties.getSuccessUrl());
        shiroFilter.setUnauthorizedUrl("/global/error");
        HashMap<String, Filter> myFilters = new HashMap();
        myFilters.put("user", new UserLoginFilter(CasicProperties));
        shiroFilter.setFilters(myFilters);
        Map<String, String> hashMap = new LinkedHashMap();
        hashMap.put("/static/**", "anon");
        hashMap.put("/doc.html", "anon");
        hashMap.put("/swagger-resources/**", "anon");
        hashMap.put("/v2/api-docs", "anon");
        hashMap.put("/v2/api-docs-ext", "anon");
        hashMap.put("/webjars/**", "anon");
        Iterator var6 = CasicProperties.getNoLoginUrls().iterator();
        while(var6.hasNext()) {
            String url = (String)var6.next();
            hashMap.put(url, "anon");
        }
        hashMap.put("/**", "user");
        shiroFilter.setFilterChainDefinitionMap(hashMap);
        return shiroFilter;
    }

    @Bean
    public MethodInvokingFactoryBean methodInvokingFactoryBean(DefaultWebSecurityManager securityManager) {
        MethodInvokingFactoryBean bean = new MethodInvokingFactoryBean();
        bean.setStaticMethod("org.apache.shiro.SecurityUtils.setSecurityManager");
        bean.setArguments(new Object[]{securityManager});
        return bean;
    }

    @Bean
    public LifecycleBeanPostProcessor lifecycleBeanPostProcessor() {
        return new LifecycleBeanPostProcessor();
    }

    @Bean
    public AuthorizationAttributeSourceAdvisor authorizationAttributeSourceAdvisor(DefaultWebSecurityManager securityManager) {
        AuthorizationAttributeSourceAdvisor authorizationAttributeSourceAdvisor = new AuthorizationAttributeSourceAdvisor();
        authorizationAttributeSourceAdvisor.setSecurityManager(securityManager);
        return authorizationAttributeSourceAdvisor;
    }
}