有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

如何使用Java配置配置Spring Security CAS支持?

我正在尝试使用Spring Security为我的web应用程序设置CAS身份验证。我遵循了文档,并成功地将XML配置示例转换为Java配置。然而,我不确定我做的每件事都是正确的,考虑到安全的敏感性,我希望有人能确认没有错误

例如,我如何确保不再有默认配置(如URL上的自由权限、不同的身份验证管理器和/或提供者等)

我检索当前AuthenticationManager的方式正确吗

配置入口点的方法是否正确

我发现理解如何使用WebSecurity配置适配器相当混乱

这是我的@Cofiguration类:

@EnableWebSecurity
public class SecurityConfig extends WebSecurityConfigurerAdapter {

    @Bean(name="authenticationManager")
    @Override
    public AuthenticationManager authenticationManagerBean() throws Exception {
        // TODO Auto-generated method stub
        return super.authenticationManagerBean();
    }

    @Bean
    public ServiceProperties serviceProperties() {
        final ServiceProperties serviceProperties = new ServiceProperties();
        serviceProperties.setService("http://localhost:8088/webapp/login/cas");
        return serviceProperties;

    }

    @Bean
    public AuthenticationUserDetailsService<CasAssertionAuthenticationToken> authenticationUserDetailsService() {
        return new MyCasAssertionUserDetailsService();
    }

    @Autowired
    protected void configure(AuthenticationManagerBuilder auth) throws Exception {
        super.configure(auth);
        final CasAuthenticationProvider casAuthenticationProvider = new CasAuthenticationProvider();
        casAuthenticationProvider.setServiceProperties(serviceProperties());
        casAuthenticationProvider.setAuthenticationUserDetailsService(authenticationUserDetailsService());
        casAuthenticationProvider.setTicketValidator(new Cas20ProxyTicketValidator("https://my.cas.server.com/cas"));
        casAuthenticationProvider.setKey("MY-KEY");
        auth.authenticationProvider(casAuthenticationProvider);


    }

    @Bean
    public CasAuthenticationEntryPoint casEntryPoint() {
        final CasAuthenticationEntryPoint casEntryPoint = new CasAuthenticationEntryPoint();
        casEntryPoint.setServiceProperties(serviceProperties());
        casEntryPoint.setLoginUrl("https://my.cas.server.com/cas/activateAndLogin");
        return casEntryPoint;
    }

    // filter to invoke the CAS server when the user click on "Logout from CAS" in the local logout success page
    @Bean
    public LogoutFilter requestSSOLogoutToCASServerLogoutFilter() {
        final LogoutFilter logoutFilter = new LogoutFilter("https://my.cas.server.com/cas/logout", new SecurityContextLogoutHandler());
        logoutFilter.setFilterProcessesUrl("/logout/cas");
        return logoutFilter;
    }

    // filter that receives the request to logout from the CAS server
    @Bean
    public SingleSignOutFilter singleSignOutFilter() {
        return new org.jasig.cas.client.session.SingleSignOutFilter();
    }


    @Override
    protected void configure(HttpSecurity http) throws Exception {

        final CasAuthenticationFilter casAuthenticationFilter = new CasAuthenticationFilter();
        casAuthenticationFilter.setAuthenticationManager(authenticationManager());

        http
            .exceptionHandling().authenticationEntryPoint(casEntryPoint())
        .and()
            .logout()
                .logoutSuccessUrl("/cas-logout") // which page to redirect the User after the local log-out succeeded
                .permitAll() // all users can logout
        .and()
            .authorizeRequests()
                .anyRequest().authenticated()
        .and()
            .addFilter(casAuthenticationFilter)
            .addFilterBefore(requestSSOLogoutToCASServerLogoutFilter(), LogoutFilter.class)
            .addFilterBefore(singleSignOutFilter(), CasAuthenticationFilter.class)
            ;
    }
}

共 (0) 个答案