如何将请求参数传递给'default-target-url'
我在login.jsp页面的隐藏字段中设置'cat = 1',并期待它在default-target-url上可用。进入春季-security.xml文件是,如何将请求参数传递给'default-target-url'
<form-login login-page="/login.html" default-target-url="/index.html"
authentication-failure-url="/loginfailed.html" />
,并在控制器,
@RequestMapping(value="/index", method = RequestMethod.GET)
public String index(HttpServletRequest request) {
String cat = request.getParameter("cat");
if (cat != null && cat.equalsIgnoreCase("1")) {
return "add";
}
return "redirect:/index.jsp";
}
但不能得到请求参数值(猫为空),所以我认为这是因为“默认靶url'重定向请求(并且不转发它?)。是这样吗?
如果是,那么有什么办法可以将参数传递给'default-target-url'吗?
重定向由redirectStrategy
属性SimpleUrlAuthenticationSuccessHandler
中定义的重定向策略控制。
redirectStrategy
的默认值是DefaultRedirectStrategy
的实例。
你需要做的是实现你自己的redirectStrategy
(执行RedirectStrategy
)。 ,对其进行配置:
...
<bean id="usernamePasswordAuthenticationFilter">
...
<property name="authenticationSuccessHandler">
<bean
class="org.springframework.security.web.authentication.SavedRequestAwareAuthenticationSuccessHandler">
<property name="redirectStrategy">
<bean class="yourRedirectStrategy"/>
<property>
</bean>
</property>
</bean>
它重定向通过defult,但也有你可以用它来改变这种行为,一对夫妇的配置选项。它们都在AbstractAuthenticationTargetUrlRequestHandler
上定义,它是两个现有认证成功处理程序实现的父类(缺省情况下SavedRequestAwareAuthenticationSuccessHandler
由名称空间配置使用)。
设置其
targetUrlParameter
属性,所以它会检查HTTP请求与该名称的参数。如果是这样,它将重定向到该请求参数中给出的URL。或者设置自定义redirectStrategy
。默认实现调用response.sendRedirect()
,但您可以在自定义实现中更改它。
您将有一定的难度,但因为没有这些配置点都是通过命名空间配置曝光,所以你需要去更深一层,手动读写bean定义。
我已经改变了实施方法。详细信息在下面给出,
弹簧security.xml文件
<form-login login-page="/login.html" authentication-success-handler-ref="feedSuccessHandler"
authentication-failure-url="/loginfailed.html" />
<logout logout-success-url="/loggedout.html"/>
<beans:bean id="feedSuccessHandler"
class="main.java.com.sp.utilities.FeedSuccessHandler">
</beans:bean>
FeedSuccessHandler.java
public class FeedSuccessHandler implements AuthenticationSuccessHandler {
public void onAuthenticationSuccess(HttpServletRequest request,
HttpServletResponse response, Authentication authentication)
throws IOException, ServletException {
String cat = request.getParameter("cat");
if (cat != null && cat.equalsIgnoreCase("1")) {
response.sendRedirect(request.getContextPath()+"/add.html");
}else{
SavedRequest savedRequest = new HttpSessionRequestCache().getRequest(request, response);
if(savedRequest != null) {
response.sendRedirect(savedRequest.getRedirectUrl());
}else{
response.sendRedirect(request.getContextPath()+"/");
}
}
}
}
应用程序正在根据需要也将来如果我想根据重定向定制角色,我可以使用相同的类。