form-login으로 로그인 할 수있는 웹 응용 프로그램이 있거나 사전 인증을 받아 로그인 할 수 있습니다. 두 방법 모두 잘 작동하지만 authentication-success-handler-ref 속성을 사용하여 form-login으로 성공 처리기를 사용할 수있는 방법을 찾을 수 있습니다.봄 보안 사전 인증 성공 처리기
제 질문은 내 보안 응용 프로그램 컨텍스트의 PRE_AUTH_FILTER에 대한 성공 처리기 "mySuccessHandler"를 어떻게 호출 할 수 있습니까? 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>
의견을 보내 주셔서 감사합니다. 나는 정확하게 당신과 비슷한 성공 처리자를 만들었습니다. 그리고 security-context.xml 파일에 를 추가했습니다. 그러나 성공 처리기의 코드는 호출되지 않습니다. 그 이유는 무엇입니까? –
bjozzi
네, 인증 된 success-handler-ref = "authHandler"가 SavedRequestAwareAuthenticationSuccessHandler를 사용하고 있습니다 만, 사전 인증 필터를 사용할 때이를 호출하는 방법을 알아야합니다. – bjozzi
인증을 받기 전에 처리기를 호출하는 이유는 무엇입니까? 유효한 사용자로 밝혀진 경우에만 사용자를 다른 페이지로 리디렉션하는 것이 좋습니다. 따라서 여기서는 인증 성공 처리기를 사용하는 것이 올바른 방법입니다. –