Аутентифицировать весеннее веб-приложение через сервер CAS

Я установил сервер CAS на моем сервере. (с развертыванием войны в Apache Tomcat) . У меня есть информация о пользователе, такая как имя пользователя и пароль, на этом сервере CAS. (в будущем он будет подключаться к LDAP или простой базе данных отношений для учетных данных пользователя. Проблема здесь. Я хочу аутентифицировать мое приложение Spring через этот сервер CAS, но я не смог найти никакой подходящей конфигурации для безопасности Spring. Мой конфиг файл:

        @Override
    protected void configure(HttpSecurity http) throws Exception {
        http
            .csrf().disable()
            .authorizeRequests()
                .antMatchers("/assets","/css", "/js","/font-awesome","/bootstrap","/images").permitAll()
                .antMatchers("/", "/home").authenticated()
//                .antMatchers("/hi").access("hasRole('ROLE_SUBSCRIPTION') or hasRole('ROLE_ADMIN')")
                .antMatchers("/edit").authenticated()
//                .antMatchers("/playlists/*").authenticated()
//                .antMatchers("/createplaylist").authenticated()
                .and()
            .formLogin()
                .loginPage("/login")
                .permitAll()
                .and()
            .logout()
                .permitAll();
    }

    @Bean
    public ServiceProperties serviceProperties() {
        ServiceProperties sp = new ServiceProperties();
        sp.setService(env.getRequiredProperty(CAS_SERVICE_URL));
        sp.setSendRenew(false);
        return sp;
    }
    @Bean
    public Set<String> adminList() {
        Set<String> admins = new HashSet<String>();
        String adminUserName = env.getProperty(APP_ADMIN_USER_NAME);

        admins.add("admin");
        if (adminUserName != null && !adminUserName.isEmpty()) {
            admins.add(adminUserName);
        }
        return admins;
    }

    @Bean
    public AuthenticationUserDetailsService<CasAssertionAuthenticationToken> customUserDetailsService() {
        return new CustomUserDetailsService(adminList());
    }
    @Bean
    public CasAuthenticationProvider casAuthenticationProvider() {
        CasAuthenticationProvider casAuthenticationProvider = new CasAuthenticationProvider();
//        casAuthenticationProvider.setAuthenticationUserDetailsService(customUserDetailsService());
//        casAuthenticationProvider.setServiceProperties(serviceProperties());
        casAuthenticationProvider.setTicketValidator(cas20ServiceTicketValidator());
//        casAuthenticationProvider.setKey("an_id_for_this_auth_provider_only");
        return casAuthenticationProvider;
    }
    @Bean
    public Cas20ServiceTicketValidator cas20ServiceTicketValidator() {
        return new Cas20ServiceTicketValidator(env.getRequiredProperty(CAS_URL_PREFIX));
    }

    @Autowired
    public void configureGlobal(AuthenticationManagerBuilder auth) throws Exception {
//        auth.inMemoryAuthentication().withUser("admin").password("admin").roles("ADMIN");
        auth.authenticationProvider(casAuthenticationProvider());
    }

3 ответа

Ну, я нашел простую автоматическую настройку для клиента Cas на GitHub на весну всего двумя движениями:) сначала добавьте зависимость, затем добавьте аннотацию https://github.com/Unicon/cas-client-autoconfig-support

@kaveh.n Я надеюсь, что вы получаете ошибку 403 при доступе к вашему сервису. Если это ваша проблема, точка входа аутентификации является отсутствующей частью вашей конфигурации. Пожалуйста, следуйте весеннему учебнику для настройки http://docs.spring.io/spring-security/site/docs/3.1.4.RELEASE/reference/cas.html

Другие вопросы по тегам