spring boot 整合shiro 前后端分离跨域请求配置

spring boot 整合shiro 前后端分离跨域请求配置

Scroll Down

Shiro配置如下

@Configuration
public class ShiroConfig {
    // 创建web安全管理器
    @Bean
    public DefaultWebSecurityManager getDefaultWebSecurityManager(CustomRealm realm) {
        DefaultWebSecurityManager defaultWebSecurityManager = new DefaultWebSecurityManager();
        // 设置自定义Realm
        defaultWebSecurityManager.setRealm(realm);
        return defaultWebSecurityManager;
    }
    // 配置url过滤器
    @Bean
    public ShiroFilterChainDefinition shiroFilterChainDefinition() {
        DefaultShiroFilterChainDefinition chainDefinition = new DefaultShiroFilterChainDefinition();
        // 静态资源直接访问
        chainDefinition.addPathDefinition("/*.html","anon");
        chainDefinition.addPathDefinition("/css/*","anon");
        chainDefinition.addPathDefinition("/js/*","anon");
        chainDefinition.addPathDefinition("/img/*","anon");
//
//        // 登录注册页直接访问
        chainDefinition.addPathDefinition("/user/*", "anon");
//
//        // 只有登录或者勾选记住密码的用户才能访问
        chainDefinition.addPathDefinition("/**", "authc");

        return chainDefinition;
    }


    // 前后端分离,解决跨域请求过滤器,
    @Bean
    public FilterRegistrationBean corsFilter() {
        UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource();
        CorsConfiguration config = new CorsConfiguration();
        // #允许向该服务器提交请求的URI,*表示全部允许,在SpringMVC中,如果设成*,会自动转成当前请求头中的Origin
        config.addAllowedOrigin("*");
        // #允许访问的头信息,*表示全部
        config.addAllowedHeader("*");
        // 允许提交请求的方法,*表示全部允许
        config.addAllowedMethod("*");
        // 预检请求的缓存时间(秒),即在这个时间段里,对于相同的跨域请求不会再预检了
        config.setMaxAge(18000L);
        // 允许cookies跨域
        config.setAllowCredentials(true);

        source.registerCorsConfiguration("/**", config);

        FilterRegistrationBean bean = new FilterRegistrationBean(new CorsFilter(source));
        // 设置监听器的优先级,设置最高
        bean.setOrder(0);

        return bean;
    }
}