Java 预验证过滤器&x2B;登录表单身份验证
我是SpringSecurity的新手,似乎我有一个问题对我来说太难了,对于常见问题和其他网站来说 任务是:Java 预验证过滤器&x2B;登录表单身份验证,java,authentication,spring-security,Java,Authentication,Spring Security,我是SpringSecurity的新手,似乎我有一个问题对我来说太难了,对于常见问题和其他网站来说 任务是: 我有一个带有登录表单的spring应用程序。一切都很好 现在我需要有能力从应用程序获得任何允许的页面,但通过URL认证。。。类似于:。我用PRE_AUTH_过滤器做的。一切都与URL一起工作 问题是我在我的应用程序中需要两种身份验证方式。假设如果预验证过滤器失败,则加载标准登录表单。因此:将显示我的登录表单,并在第1点) 现在,在我的安全配置中,我只有PRE_AUTH_过滤器工作 我错过
<sec:http auto-config="true" use-expressions="true">
<sec:form-login login-page="/login.jsp" default-target-url="/start" authentication-failure-url="/login.jsp?error=true"/>
<sec:logout logout-url="/logout" logout-success-url="/login.jsp"/>
<sec:anonymous username="guest" granted-authority="ROLE_ANONYMOUS"/>
<sec:access-denied-handler error-page="/error403.jsp"/>
<sec:intercept-url pattern="/login*" access="permitAll"/>
<sec:intercept-url pattern="/objautocomplete*" access="hasRole('ROLE_USER')"/>
<sec:intercept-url pattern="/start*" access="hasRole('ROLE_USER')"/>
<sec:intercept-url pattern="/u*" access="hasRole('ROLE_USER')"/>
<sec:intercept-url pattern="/crosstable*" access="hasRole('ROLE_USER')"/>
<sec:intercept-url pattern="/objcen*" access="hasRole('ROLE_USER')"/>
<sec:intercept-url pattern="/objchecks*" access="hasRole('ROLE_USER')"/>
<sec:intercept-url pattern="/globalcen*" access="hasRole('ROLE_USER')"/>
<sec:custom-filter position="PRE_AUTH_FILTER" ref="preAuthFilter" />
<sec:remember-me/>
</sec:http>
<!-- PRE_ AUTHENTICATION -->
<beans:bean id="userDetailsServiceImpl"
class="com.grsnet.qvs.auth.UserDetailsServiceImpl" />
<beans:bean id="preAuthenticatedProcessingFilterEntryPoint"
class="com.grsnet.qvs.auth.LinkForbiddenEntryPoint" />
<beans:bean id="preAuthenticationProvider" class="org.springframework.security.web.authentication.preauth.PreAuthenticatedAuthenticationProvider">
<beans:property name="preAuthenticatedUserDetailsService" ref="userDetailsServiceImpl" />
</beans:bean>
<beans:bean id="preAuthFilter"
class="com.grsnet.qvs.auth.UrlParametersAuthenticationFilter">
<beans:property name="authenticationManager" ref="appControlAuthenticationManager" />
</beans:bean>
<sec:authentication-manager alias="appControlAuthenticationManager">
<sec:authentication-provider ref="preAuthenticationProvider" />
</sec:authentication-manager>
<!-- LOGIN FORM AUTHENTICATION -->
<sec:authentication-manager>
<sec:authentication-provider user-service-ref="qvsUserDetailsService"/>
</sec:authentication-manager>
<beans:bean id="qvsUserDetailsService" class="com.grsnet.qvs.auth.QVSUserDetailsService"/>
</beans:beans>
所以,放弃你的过滤器,使用标准的UsernamePasswordAuthenticationFilter
<beans:bean id="urlParameterAuthFilter" class="org.springframework.security.web.authentication.UsernamePasswordAuthenticationFilter">
<beans:property name="usernameParameter" value="username" />
<beans:property name="passwordParameter" value="password" />
<beans:property name="postOnly" value="false" />
<beans:property name="authenticationManager" ref="appControlAuthenticationManager" />
</beans:bean>
然后将自定义筛选器声明替换为
<sec:custom-filter before="FORM_LOGIN_FILTER" ref="urlParameterAuthFilter" />
免责声明:在URL中传递密码是一个非常非常糟糕的主意,您首先不应该这样做。它将出现在访问日志中,并引入了一大堆真正不必要的安全问题
所以,放弃你的过滤器,使用标准的UsernamePasswordAuthenticationFilter
<beans:bean id="urlParameterAuthFilter" class="org.springframework.security.web.authentication.UsernamePasswordAuthenticationFilter">
<beans:property name="usernameParameter" value="username" />
<beans:property name="passwordParameter" value="password" />
<beans:property name="postOnly" value="false" />
<beans:property name="authenticationManager" ref="appControlAuthenticationManager" />
</beans:bean>
然后将自定义筛选器声明替换为
<sec:custom-filter before="FORM_LOGIN_FILTER" ref="urlParameterAuthFilter" />
免责声明:在URL中传递密码是一个非常非常糟糕的主意,您首先不应该这样做。它将出现在访问日志中,并引入了一大堆真正不必要的安全问题。我应该用字符串替换我的代码吗?还是加上?当我替换时,我有下一种情况:1。登录表单工作2。url验证不起作用,并在登录表单上重定向我。更新:有下一个异常:找不到org.springframework.security.web.authentication.preauthentication.PreAuthenticatedAuthenticationTokenUPDATE的AuthenticationProvider:当我尝试调试时,UserDetails Service Impl中没有任何活动。当我使用PRE_AUTH_FILTER时,我已经进行了调试活动,并且已经成功了。请您发布您的URLParametersAuthenticationFilteries的代码。请在更新部分查看它。顺便说一下,我在UrlParametersAuthenticationFilter.java中有所有良好的调试活动。我应该用字符串替换我的代码吗?还是加上?当我替换时,我有下一种情况:1。登录表单工作2。url验证不起作用,并在登录表单上重定向我。更新:有下一个异常:找不到org.springframework.security.web.authentication.preauthentication.PreAuthenticatedAuthenticationTokenUPDATE的AuthenticationProvider:当我尝试调试时,UserDetails Service Impl中没有任何活动。当我使用PRE_AUTH_FILTER时,我已经进行了调试活动,并且已经成功了。请您发布您的URLParametersAuthenticationFilteries的代码。请在更新部分查看它。顺便说一下,我在UrlParametersAuthenticationFilter.java中有所有良好的调试活动
<sec:custom-filter before="FORM_LOGIN_FILTER" ref="urlParameterAuthFilter" />