浏览 9866 次
锁定老帖子 主题:struts2.0中拦截jsp页面的探讨!
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2008-11-08
声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
发表时间:2008-11-08
struts2是用的filter。。你自己写一个拦截器。。去解析url不就可以了么???
|
|
返回顶楼 | |
发表时间:2008-11-08
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 <result name="global.login" // type="redirect">sysLogout.action</result> 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; } } } 这个地方可以获得的到request了就可以得到一个url。。
<package name="javasys" extends="struts-default"> <interceptors> <interceptor-stack name="authenticationStack"> <interceptor-ref name="fileUpload"> <param name="maximumSize">1024000000</param> </interceptor-ref> <interceptor-ref name="basicStack" /> </interceptor-stack> <interceptor name="login" class="com.javasystem.core.interceptor.LoginInterceptor" /> <interceptor-stack name="teamwareStack"> <interceptor-ref name="i18n" /> <interceptor-ref name="login" /> <interceptor-ref name="basicStack" /> </interceptor-stack> </interceptors> .......... 在下面配置下默认的拦截器就好了。 |
|
返回顶楼 | |
发表时间:2008-11-09
最后修改:2008-11-09
glagra 写道 在struts2.0中提供了拦截的使用。假如现在有一些jsp页面(包括login.jsp,register.jsp,welcome.jsp以及一些浏览的页面)这些浏览的页面如果是没有登录的用户浏览,则直接显示,如果登录了则还在相应处要显示用户的相关信息,这个怎么可以实现?我用Filter中的doFilter方法只能拦截某些文件下的页面(也就是只有登录用户才能访问的)如果既可以被登录用户访问,也可以被未登录用户访问,该怎么实现??哪位大哥能帮我解决下这个问题??
太简单了!使用spring security用户权限认证框架吧! 这种拦截,小菜一碟! 在这种方式下:除了struts2的action,其他统统封掉.用户登陆口也只准有一个. 一切烦心事都没了! spring securty,与你的业务代码耦合相当的小,除了网址与人的用户表外,再也没其他耦合的了.而网址与用户表,也是通过数据库(如果你用在内存中使用,我也没办法)进行耦合的. |
|
返回顶楼 | |