Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/396.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Spring安全预认证成功处理程序_Java_Spring_Spring Security - Fatal编程技术网

Java Spring安全预认证成功处理程序

Java Spring安全预认证成功处理程序,java,spring,spring-security,Java,Spring,Spring Security,我有一个web应用程序,您可以使用表单登录登录,也可以通过预验证并像那样登录。这两种方法都可以很好地工作,但我只能找到使用身份验证成功处理程序ref属性将成功处理程序与表单登录一起使用的方法 我的问题是,在我的安全应用程序上下文中,如何为PRE_AUTH_过滤器调用成功处理程序“mySuccessHandler”?我想我可以在PreAuthenticatedProcessingFilter、preauthAuthProvider或自定义筛选器下将其称为属性或其他内容 如果用户的角色是教师或学生,

我有一个web应用程序,您可以使用表单登录登录,也可以通过预验证并像那样登录。这两种方法都可以很好地工作,但我只能找到使用身份验证成功处理程序ref属性将成功处理程序与表单登录一起使用的方法

我的问题是,在我的安全应用程序上下文中,如何为PRE_AUTH_过滤器调用成功处理程序“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>


您的需求是根据角色将用户重定向到不同的页面。您还可以使用身份验证成功处理程序来完成此操作。参考我编写的示例类。您始终可以访问重写的
onAuthenticationSuccess
方法中的
Authentication
对象。您可以获得登录用户的权限和角色,并根据其情况,始终可以将用户重定向到相应的页面


希望这能有所帮助。

谢谢你的评论,我让成功处理者和你一模一样。并添加到我的security-context.xml文件中。但是从未调用成功处理程序中的代码,知道为什么吗?是的,您正在调用使用SavedRequestStataWareAuthenticationSuccessHandler的身份验证成功处理程序ref=“authHandler”,但我需要知道在使用预身份验证筛选器时如何调用它。为什么在完成身份验证之前调用处理程序?只有当用户被证明是有效用户时,将其重定向到不同的页面才有意义。因此,在这里使用身份验证成功处理程序是一种正确的方法。