2013-02-19 156 views
2

我在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'吗?

回答

0

重定向由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> 
0

重定向通过defult,但也有你可以用它来改变这种行为,一对夫妇的配置选项。它们都在AbstractAuthenticationTargetUrlRequestHandler上定义,它是两个现有认证成功处理程序实现的父类(缺省情况下SavedRequestAwareAuthenticationSuccessHandler由名称空间配置使用)。

  1. 设置其targetUrlParameter属性,所以它会检查HTTP请求与该名称的参数。如果是这样,它将重定向到该请求参数中给出的URL。或者设置自定义redirectStrategy。默认实现调用response.sendRedirect(),但您可以在自定义实现中更改它。

您将有一定的难度,但因为没有这些配置点都是通过命名空间配置曝光,所以你需要去更深一层,手动读写bean定义。

2

我已经改变了实施方法。详细信息在下面给出,

弹簧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()+"/"); 
      } 
     } 
    } 
} 

应用程序正在根据需要也将来如果我想根据重定向定制角色,我可以使用相同的类。