form-login
标记是否可以使用外部资源的网址?
我有两个在不同的应用程序上下文中运行的Web服务[案例#1]。它们也可以在不同的机器上[案例#2]。
我希望第一个服务使用Spring Security来强制执行某些方法的身份验证。我希望第二个服务用作身份验证机制。如果请求在尝试在第一个服务上调用受保护方法时未经过身份验证,则应将请求转发到第二个服务进行身份验证。
两项服务均已启动并正在运行。我已经配置了第一个服务并且“正在工作”,除了URL,它将请求转发到用户尚未通过身份验证时。
如果第一个Web服务位于http://server1/community
,Spring Security是否可以将用户转发到在单独的上下文中运行的其他服务?
例如:
<security:form-login
login-page="/auth/login.jsp" />
其中/auth
是第二个服务的上下文。
或者,它可以一起转发到另一台服务器吗?
<security:form-login
login-page="http://server2/auth/login.jsp" />
当我尝试上面的第一个配置时,转发的网址变为http://server1/community/auth/login.jsp
。我想要http://server1/auth/login.jsp
。
第二种配置产生了http://server1/communityhttp://server2/auth/login.jsp
。
显然,URL被认为是相对于当前上下文的。有没有办法改变这种行为?或者,有没有更好的方法来做我想做的事情,我只是没有偶然发现它? ^ __ ^
感谢您的帮助!
- JS
PS:我之前发布的这篇文章是对前一篇文章的“回答”。遗憾。
答案 0 :(得分:1)
我想你可以覆盖LoginUrlAuthenticationEntryPoint类,而不是使用标签,你手动将所需元素添加到配置
有关所需元素,请参阅form-login doku。 它只有UsernamePasswordAuthenticationFilter和LoginUrlAuthenticationEntryPoint。 我想你可以使用自定义过滤器标签来添加过滤器。
答案 1 :(得分:1)
是的,有办法做你想做的事。您需要的关键字是login-processing-url
元素上的form-login
。
示例:
<form-login login-page="/auth/login" login-processing-url="/auth/example_security_check"/>
然后在你的jsp页面中,你想把动作设置为你放在那里的任何东西:
<form action="example_security_check" method="post">
<label for="j_username">Login</label>:
<input id="j_username" name="j_username" size="20" maxlength="50" type="text"/>
<br/>
<label for="j_password">Password</label>:
<input id="j_password" name="j_password" size="20" maxlength="50" type="password"/>
<br/>
<input type="submit" value="Login"/>
<br/>
<br/>
<input id="_spring_security_remember_me" name="_spring_security_remember_me" type="checkbox" value="true"/>
<label for="_spring_security_remember_me">Remember Me?</label>
</form>
该属性的文档在这里
http://static.springsource.org/spring-security/site/docs/3.0.x/reference/appendix-namespace.html