Spring Security 多登录页的相关配置

示例: 

@EnableWebSecurity
@Order(SecurityProperties.BASIC_AUTH_ORDER)
@EnableGlobalMethodSecurity(prePostEnabled = true, securedEnabled = true)
public class MultiHttpSecurityConfiguration {


    private final UsersClient usersClient;

    @Autowired
    public MultiHttpSecurityConfiguration(UsersClient usersClient) {
        this.usersClient = usersClient;
    }

    @Autowired
    protected void configureGlobal(AuthenticationManagerBuilder auth) {
        auth.authenticationProvider(authProvider());
    }

    @Bean
    public UserDetailsService customUserDetailsService() {
        CustomUserDetailsService customUserDetailsService = new CustomUserDetailsService();
        customUserDetailsService.setUsersClient(usersClient);
        return customUserDetailsService;
    }

    @Bean
    public PasswordEncoder passwordEncoder() {
        return new BCryptPasswordEncoder();
    }

    @Bean
    public AuthenticationProvider authProvider() {
        DaoAuthenticationProvider authProvider = new DaoAuthenticationProvider();
        authProvider.setUserDetailsService(customUserDetailsService());
        authProvider.setPasswordEncoder(passwordEncoder());
        return authProvider;
    }

    @Configuration
    @Order(2)
    public static class FormLoginWebSecurityConfigurerAdapter extends WebSecurityConfigurerAdapter {

        private final AccessDeniedHandler accessDeniedHandler;

        private final UserDetailsService customUserDetailsService;

        @Autowired
        public FormLoginWebSecurityConfigurerAdapter(AccessDeniedHandler accessDeniedHandler, UserDetailsService customUserDetailsService) {
            this.accessDeniedHandler = accessDeniedHandler;
            this.customUserDetailsService = customUserDetailsService;
        }


        @Override
        protected void configure(HttpSecurity http) throws Exception {
            http
                    .authorizeRequests()
                    .antMatchers("/personal/**").authenticated()
                    .antMatchers("/t/**").hasRole("TEACHER")
                    .antMatchers("/login**").permitAll()
                    .anyRequest().permitAll()

                    .and()
                    .rememberMe()
                    .rememberMeParameter("remember-me")
                    .key("uniqueSecretUsedForGenerateToken")
                    .tokenValiditySeconds(86400)
                    .userDetailsService(customUserDetailsService)

                    .and()
                    .formLogin()
                    .loginPage("/login")
                    .loginProcessingUrl("/doLogin")
                    .successForwardUrl("/login-success")
                    .failureUrl("/login?error=1")
                    .permitAll()

                    .and()
                    .logout()
                    .logoutUrl("/logout")
                    .logoutSuccessUrl("/") //退出登录后的默认网址是”/”
                    .clearAuthentication(true)
                    .invalidateHttpSession(true)

                    .and()
                    .exceptionHandling()
                    .accessDeniedHandler(accessDeniedHandler)

                    .and()
                    .csrf().disable();
        }

    }

    @Configuration
    @Order(1) // Order(1) 优先级高
    public static class AdminLoginSecurityConfigurationAdapter extends WebSecurityConfigurerAdapter {

        private final AccessDeniedHandler customAccessDeniedHandler;

        private final UserDetailsService customUserDetailsService;

        @Autowired
        public AdminLoginSecurityConfigurationAdapter(AccessDeniedHandler customAccessDeniedHandler, UserDetailsService customUserDetailsService) {
            this.customAccessDeniedHandler = customAccessDeniedHandler;
            this.customUserDetailsService = customUserDetailsService;
        }

        @Override
        protected void configure(HttpSecurity http) throws Exception {
            http
                    .antMatcher("/admin/**")
                    .authorizeRequests()
                    .antMatchers("/login", "/admin/login", "/admin/doLogin", "/admin/logout").permitAll()
                    .anyRequest().access("not( hasAnyRole('STUDENT', 'TEACHER') ) and isAuthenticated()")
                    .and()
                    .rememberMe()
                    .rememberMeParameter("remember-me")
                    .key("uniqueSecretUsedForGenerateToken")
                    .tokenValiditySeconds(86400)
                    .userDetailsService(customUserDetailsService)

                    .and()
                    .formLogin()
                    .loginPage("/admin/login")
                    .loginProcessingUrl("/admin/doLogin")
                    .defaultSuccessUrl("/admin")
                    .failureUrl("/admin/login?error=1")
                    .permitAll()

                    .and()
                    .logout()
                    .logoutUrl("/admin/logout")
                    .logoutSuccessUrl("/admin/login")
                    .clearAuthentication(true)
                    .invalidateHttpSession(true)

                    .and()
                    .exceptionHandling()
                    .accessDeniedHandler(customAccessDeniedHandler)
//                    .accessDeniedPage("/403")
                    .and()
                    .csrf().disable();

        }


    }
}

 

 

转载于:https://my.oschina.net/lemos/blog/3006022

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值