2010-09-10 37 views
3

我有一个authen拦截器,用于检查用户是否登录。 如果不是,它将重定向到登录页面,查询字符串参数“url”指示引用URL。我尝试使用“actionInvocation.getInvocationContext()。getParameters()”将值传递给重定向URL,但没有运气。如何将数据从拦截器传递到URL和JSP?

任何人都可以建议我做错了什么?非常感谢。

拦截代码:

public String intercept(ActionInvocation actionInvocation) throws Exception { 
    Map session = actionInvocation.getInvocationContext().getSession(); 
    Map params = actionInvocation.getInvocationContext().getParameters(); 

    String user = (String) session.get(Constants.KEY_USER); 

    boolean isAuthenticated = (null!=user); 

    if (!isAuthenticated) { 
     params.put("backUrl", "http://www.some_url.com/"); 
     return Action.LOGIN;    
    } 
    else { 
     return actionInvocation.invoke(); 
    } 
} 

struts.xml的部分

<global-results> 
    <result name="login" type="redirect">/login?url=${backUrl}</result> 

回答

0

检查为了在struts.xml文件拦截的; PARAMS拦截器应置于登录前截击:

<interceptor-stack name="defaultLoginStack"> 
     ... 
     <interceptor-ref name="params" /> 
     <interceptor-ref name="login" /> 
     ... 
</interceptor-stack> 

下面是一个example

另一种方式来获得查询字符串,是从属性javax.servlet.forward.query_string

String queryString = (String) actionInvocation.getRequest(). 
     getAttribute("javax.servlet.forward.query_string"); 
相关问题