Spring Security 3.1.4使用同一身份验证管理器在不同页面上创建多个登录表单
事实上,我已经被这个问题困扰了一段时间,现在不知道该怎么进一步了。 我希望有多个标记,但据我所知,这在同一个http块中是不可能的。 原因是我希望身份验证失败url指向登录尝试来自的页面(并且在成功尝试时将用户重定向回该站点) 我有一个header.jsp文件,其中有我的登录表单。我希望将来在我的所有页面上都包含这一点,以便用户能够从所有页面登录,而无需重定向 我该怎么做 我的大部分代码都取自spring示例。(安全+社会+注册示例) 这是my security.xml的重要部分(没有任何尝试) 另一种尝试是在security.xml中创建一个过滤器,以正确路由流量。我不知道怎么做 我希望有人能在这方面帮助我,并说什么是合适的方法 致以最良好的祝愿,Spring Security 3.1.4使用同一身份验证管理器在不同页面上创建多个登录表单,spring,login,spring-security,spring-social,Spring,Login,Spring Security,Spring Social,事实上,我已经被这个问题困扰了一段时间,现在不知道该怎么进一步了。 我希望有多个标记,但据我所知,这在同一个http块中是不可能的。 原因是我希望身份验证失败url指向登录尝试来自的页面(并且在成功尝试时将用户重定向回该站点) 我有一个header.jsp文件,其中有我的登录表单。我希望将来在我的所有页面上都包含这一点,以便用户能够从所有页面登录,而无需重定向 我该怎么做 我的大部分代码都取自spring示例。(安全+社会+注册示例) 这是my security.xml的重要部分(没有任何尝试)
Nilsi通过Ajax发布登录表单,如果需要,在成功登录时刷新当前页面(可能会提示用户这样做),或者在登录失败时显示错误消息“login failed” 要执行此操作,请实现自定义的
AuthenticationSuccessHandler
和AuthenticationFailureHandler
:
成功:返回HTTP 204 No内容作为成功的指示,并在客户端重新加载页面
失败:返回HTTP 401 Unauthorized以指示失败,并在客户端显示错误消息 原因是我希望身份验证失败url指向登录尝试来自的页面(并且在成功尝试时将用户重定向回该站点) 为此,我们在项目中添加了非常简单的入口点,如下所示:
<http ... entry-point-ref="LoginUrlAuthenticationEntryPoint">
...
然后使用RedirectUrlBuilder
创建类似http://mysite/signin?redirect_url=http://mysite/some_page.jsp
并从此方法返回。差不多完成了
成功登录后,分析参数重定向\u url
并将用户重定向到it页面
<!-- Login place 1, sign in page -->
<http pattern="/signin" use-expressions="true">
<form-login login-page="/signin" login-processing-url="/signin/authenticate" authentication-failure-url="/signin?error=bad_credentials" />
<intercept-url pattern="/addcourse" access="isAuthenticated()" />
<logout logout-url="/signout" delete-cookies="JSESSIONID" />
</http>
<!--Login place 2, start page -->
<http pattern="/" use-expressions="true">
<form-login login-page="/" login-processing-url="/signin/authenticate" authentication-failure-url="/?error=bad_credentials" />
<logout logout-url="/signout" delete-cookies="JSESSIONID" />
</http>
Sep 26, 2013 11:57:43 PM org.apache.catalina.core.StandardContext listenerStart
SEVERE: Exception sending context initialized event to listener instance of class org.springframework.web.context.ContextLoaderListener
org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'providerSignInController' defined in class path resource [com/courseportal/project/config/SocialConfig.class]: Unsatisfied dependency expressed through constructor argument with index 0 of type [org.springframework.security.web.savedrequest.RequestCache]: : No qualifying bean of type [org.springframework.security.web.savedrequest.RequestCache] is defined: expected single matching bean but found 2: org.springframework.security.web.savedrequest.HttpSessionRequestCache#0,org.springframework.security.web.savedrequest.HttpSessionRequestCache#1; nested exception is org.springframework.beans.factory.NoUniqueBeanDefinitionException: No qualifying bean of type [org.springframework.security.web.savedrequest.RequestCache] is defined: expected single matching bean but found 2: org.springframework.security.web.savedrequest.HttpSessionRequestCache#0,org.springframework.security.web.savedrequest.HttpSessionRequestCache#1
at org.springframework.beans.factory.support.ConstructorResolver.createArgumentArray(ConstructorResolver.java:730)
<http ... entry-point-ref="LoginUrlAuthenticationEntryPoint">
...
<bean id="LoginUrlAuthenticationEntryPoint"
class="YOU_CLASS_LoginUrlAuthenticationEntryPoint">
<property name="loginFormUrl" value="/signin" />
</bean>
import import org.springframework.security.web.util.*;
...
public class YOU_CLASS_LoginUrlAuthenticationEntryPoint extends
LoginUrlAuthenticationEntryPoint {
...
@Override
protected String buildRedirectUrlToLoginPage(
HttpServletRequest request,
HttpServletResponse response,
AuthenticationException authException) {
//following code check if your on login page already, then you don't add redirect
String loginForm =
determineUrlToUseForThisRequest(request, response, authException);
if (UrlUtils.isAbsoluteUrl(loginForm)) {
return loginForm;
}