我正在使用 Spring Security 3.1,我想在用户登录之前获取来自 URL 的参数。所以我希望访问我的登录页面的用户向我发送一个 redir 参数(包含他想要的 URL在他认证后去)。当我请求页面时,而不是当我尝试提交表单以登录时。
例如:localhost/myApp?redir=my.app.com/custom
如何从 URL 获取 redir 参数?
我尝试了几件事,包括覆盖 SimpleUrlAuthenticationSuccessHandler 和调用 request.getParameter("redir") 但它返回 null。我还尝试实现自己的过滤器 UsernamePasswordAuthenticationFilter 并在尝试身份验证时调用 getParameter(),但返回 null。
更新附加信息:我的登录页面非常简单,基本上:通过 POST 方法调用 /j_spring_security_check 的表单(使用 j_username 和 j_password 参数)。
我的身份验证提供程序实现了 AuthenticationManager,因此在用户通过身份验证后,将返回 Authentication 对象以及授权列表、用户、密码。
我还实现了 SimpleUrlAuthenticationSuccessHandler 并且 onAuthenticationSuccess() 方法将检查他的权限,如果经过身份验证和许可,用户将被重定向到他在 URL 上通知的页面(现在,当我尝试在此调用 request.getParemeter("redir")方法,我得到空值。
public class GetURLFilter extends UsernamePasswordAuthenticationFilter{
@Override
public Authentication attemptAuthentication(HttpServletRequest request, HttpServletResponse response)
throws AuthenticationException {
String paginaRedirecionar = request.getParameter("redir");
request.getSession().setAttribute("redirecionamento", paginaRedirecionar);
return super.attemptAuthentication(request, response);
}
}
<bean id="authenticationFilter"
class="com.uolinc.adm.security.GetURLFilter"
p:authenticationManager-ref="radiusAuthenticationManager"
p:authenticationFailureHandler-ref="radiusAuthenticationFailureHandler"
p:authenticationSuccessHandler-ref="radiusAuthenticationSuccessHandler" />
<security:http auto-config="false"
use-expressions="true"
access-denied-page="/auth/denied" entry-point-ref="authenticationEntryPoint"
disable-url-rewriting="true"
access-decision-manager-ref="accessDecisionManager">
<security:logout logout-url="/auth/logout" logout-success-url="/auth/login" />
<security:custom-filter position="FORM_LOGIN_FILTER" ref="authenticationFilter" />
</security:http>
谢谢