Spring security Pre-успешный обработчик аутентификации

1

У меня есть веб-приложение, в котором вы можете войти в систему с помощью формы-входа, или вы можете быть предварительно аутентифицированы и войти в систему таким образом. Оба метода работают хорошо, но я могу найти способ использовать обработчик успеха с формой-login, используя свойство authentication-success-handler-ref.

Мой вопрос: как я могу назвать обработчик успеха "mySuccessHandler" для PRE_AUTH_FILTER в моем контексте безопасности-приложения? Я бы предположил, что я могу назвать это свойством или чем-то под PreAuthenticatedProcessingFilter, preauthAuthProvider или настраиваемым фильтром.

Просто нужно перейти на разные страницы, если у пользователя есть роль Учитель или Студент.

<beans:beans xmlns="http://www.springframework.org/schema/security"
         xmlns:beans="http://www.springframework.org/schema/beans"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://www.springframework.org/schema/beans
                http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
                http://www.springframework.org/schema/security
                http://www.springframework.org/schema/security/spring-security-3.2.xsd">


<http pattern="/**" use-expressions="true" create-session="always">
    <intercept-url pattern="/login.jsp*" access="permitAll" />
    <intercept-url pattern="/**/ErrorPages/**" access="permitAll" />
    <intercept-url pattern="/**/Students/**" access="hasAnyRole('STUDENT, TEACHER')" />
    <intercept-url pattern="/**/Teacher/**" access="hasRole('TEACHER')" />
    <intercept-url pattern="/**/Login/**" access="hasRole('ROLE_USER')" />
    <intercept-url pattern="/**/Js/**" access="hasRole('ROLE_USER')" />
    <intercept-url pattern="/**/Css/**" access="permitAll" />
    <intercept-url pattern="/**/Img/**" access="permitAll" />
    <intercept-url pattern="/**/api/**" access="hasRole('ROLE_USER')" />
    <intercept-url pattern="/**" access="denyAll" />
    <custom-filter position="PRE_AUTH_FILTER" ref="PreAuthenticatedProcessingFilter" />
    <access-denied-handler
    <form-login
            username-parameter="idnumber"
            password-parameter="password" login-processing-url="/athuga_innskraningu"
            login-page='/login.jsp'
            authentication-failure-handler-ref="myAuthErrorHandler"
            authentication-success-handler-ref="mySuccessHandler"
            always-use-default-target='true'
            authentication-failure-url="/login.jsp?login_error=true"/>
    <logout logout-url="/utskra/" logout-success-url="/login.jsp"/>
</http>


<beans:bean id="mySuccessHandler" class="is.inna.rest.login.AuthenticationSuccess"/>
<beans:bean id="myAuthErrorHandler" class="is.inna.rest.login.AuthenticationFailure"/>
<beans:bean id="passwordEncoder" class="org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder"/>

<beans:bean name="myUserDetailsService" class="is.inna.rest.login.UserDetailServiceLogin" />
<beans:bean id="userDetailsServiceWrapper"  class="is.inna.rest.login.UserDetailServicePreAuth" />

<authentication-manager alias="authenticationManager">
    <authentication-provider user-service-ref="myUserDetailsService">
        <password-encoder ref="passwordEncoder" />
    </authentication-provider>
    <authentication-provider ref="preauthAuthProvider" />
</authentication-manager>


<beans:bean id="preauthAuthProvider" class="org.springframework.security.web.authentication.preauth.PreAuthenticatedAuthenticationProvider">
    <beans:property name="preAuthenticatedUserDetailsService" ref="userDetailsServiceWrapper"/>
</beans:bean>
<beans:bean id="PreAuthenticatedProcessingFilter" class="is.inna.rest.login.PreAuthenticatedProcessingFilter">
    <beans:property name="authenticationManager" ref="authenticationManager" />
</beans:bean>

Теги:
spring-security
spring

1 ответ

3
Лучший ответ

Ваше требование - перенаправить пользователя на разные страницы в зависимости от роли. Вы можете сделать это, используя также обработчик успеха проверки подлинности. Обратитесь к классу обработчика успешного образца, который я написал. У вас всегда есть доступ к объекту Authentication в переопределенном методе onAuthenticationSuccess. Вы можете получить полномочия и роль зарегистрированного пользователя, и в зависимости от этого вы всегда можете перенаправить пользователя на соответствующую страницу.

Надеюсь это поможет.

  • 0
    Спасибо за комментарий, я сделал обработчик успеха точно таким же, как вы. И добавил в свой файл security-context.xml файл <beans: bean id = "authSuccessHandler" class = "my.path.AuthSuccessHandler" />. Но код в обработчике успеха никогда не вызывается, есть идеи, почему это так?
  • 0
    Да, вы вызываете authentication-success-handler-ref = "authHandler", который использует SavedRequestAwareAuthenticationSuccessHandler, но мне нужно знать, как это вызвать, когда я использую фильтр предварительной авторизации.
Показать ещё 1 комментарий

Ещё вопросы

Сообщество Overcoder
Наверх
Меню