日期:2014-05-16  浏览次数:20374 次

struts2.0中拦截jsp页面的探讨!
在struts2.0中提供了拦截的使用。假如现在有一些jsp页面(包括login.jsp,register.jsp,welcome.jsp以及一些浏览的页面)这些浏览的页面如果是没有登录的用户浏览,则直接显示,如果登录了则还在相应处要显示用户的相关信息,这个怎么可以实现?我用Filter中的doFilter方法只能拦截某些文件下的页面(也就是只有登录用户才能访问的)如果既可以被登录用户访问,也可以被未登录用户访问,该怎么实现??哪位大哥能帮我解决下这个问题??
1 楼 toeo 2008-11-08  
struts2是用的filter。。你自己写一个拦截器。。去解析url不就可以了么???
2 楼 toeo 2008-11-08  
<pre name='code' class='java'>import javax.servlet.http.HttpServletRequest;

import org.apache.struts2.ServletActionContext;

import com.javasystem.JavaSystemConstants;
import com.javasystem.action.TuserCRUDAction;
import com.opensymphony.xwork2.ActionContext;
import com.opensymphony.xwork2.ActionInvocation;
import com.opensymphony.xwork2.interceptor.AbstractInterceptor;

public class LoginInterceptor extends AbstractInterceptor {

private static final long serialVersionUID = 8760120133840824493L;
public static final String LOGIN_KEY = "LOGIN";
// find &lt;result name="global.login"
// type="redirect"&gt;sysLogout.action&lt;/result&gt; is the forward action .
public static final String LOGIN_PAGE = "global.login";

@Override
public String intercept(ActionInvocation actionInvocation) throws Exception {
System.out.println("begin check login interceptor!");
// don't check user login action itself .
Object action = actionInvocation.getAction();
if (action instanceof TuserCRUDAction) {
System.out
.println("exit check login, because this is login action.");
return actionInvocation.invoke();
}
// check user login session .
ActionContext ctx = ActionContext.getContext();
HttpServletRequest request = (HttpServletRequest) ctx
.get(ServletActionContext.HTTP_REQUEST);
Object userSession = request.getSession().getAttribute(
JavaSystemConstants.USER_LOGIN_SESSION_NAME);
// get session use session name .
if (userSession != null) {
// 
System.out.println("already login!");
return actionInvocation.invoke();
} else {
// 
System.out.println("no login, forward login page!");
return LOGIN_PAGE;

}

}

}</pre>
<p>?这个地方可以获得的到request了就可以得到一个url。。</p>
<p>?</p>
<pre name='code' class='xml'>&lt;package name="javasys" extends="struts-default"&gt;
&lt;interceptors&gt;
&lt;interceptor-stack name="authenticationStack"&gt;
&lt;interceptor-ref name="fileUpload"&gt;
&lt;param name="maximumSize"&gt;1024000000&lt;/param&gt;
&lt;/interceptor-ref&gt;
&lt;interceptor-ref name="basicStack" /&gt;
&lt;/interceptor-stack&gt;
&lt;interceptor name="login"
class="com.javasystem.core.interceptor.LoginInterceptor" /&gt;
&lt;interceptor-stack name="teamwareStack"&gt;
&lt;interceptor-ref name="i18n" /&gt;
&lt;interceptor-ref name="login" /&gt;
&lt;interceptor-ref name="basicStack" /&gt;
&lt;/interceptor-stack&gt;
&lt;/interceptors&gt;
..........</pre>
<p>?在下面配置下默认的拦截器就好了。</p>
3 楼 yunhaifeiwu 2008-11-09  
glagra 写道
在struts2.0中提供了拦截的使用。假如现在有一些jsp页面(包括login.jsp,register.jsp,welcome.jsp以及一些浏览的页面)这些浏览的页面如果是没有登录的用户浏览,则直接显示,如果登录了则还在相应处要显示用户的相关信息,这个怎么可以实现?我用Filter中的doFilter方法只能拦截某些文件下的页面(