论坛首页 Java企业应用论坛

struts2.0中拦截jsp页面的探讨!

浏览 9866 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2008-11-08  
在struts2.0中提供了拦截的使用。假如现在有一些jsp页面(包括login.jsp,register.jsp,welcome.jsp以及一些浏览的页面)这些浏览的页面如果是没有登录的用户浏览,则直接显示,如果登录了则还在相应处要显示用户的相关信息,这个怎么可以实现?我用Filter中的doFilter方法只能拦截某些文件下的页面(也就是只有登录用户才能访问的)如果既可以被登录用户访问,也可以被未登录用户访问,该怎么实现??哪位大哥能帮我解决下这个问题??
   发表时间:2008-11-08  
struts2是用的filter。。你自己写一个拦截器。。去解析url不就可以了么???
0 请登录后投票
   发表时间: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>
	..........

 在下面配置下默认的拦截器就好了。

0 请登录后投票
   发表时间:2008-11-09   最后修改:2008-11-09
glagra 写道
在struts2.0中提供了拦截的使用。假如现在有一些jsp页面(包括login.jsp,register.jsp,welcome.jsp以及一些浏览的页面)这些浏览的页面如果是没有登录的用户浏览,则直接显示,如果登录了则还在相应处要显示用户的相关信息,这个怎么可以实现?我用Filter中的doFilter方法只能拦截某些文件下的页面(也就是只有登录用户才能访问的)如果既可以被登录用户访问,也可以被未登录用户访问,该怎么实现??哪位大哥能帮我解决下这个问题??


太简单了!使用spring security用户权限认证框架吧!

这种拦截,小菜一碟!

在这种方式下:除了struts2的action,其他统统封掉.用户登陆口也只准有一个.

一切烦心事都没了!

spring securty,与你的业务代码耦合相当的小,除了网址与人的用户表外,再也没其他耦合的了.而网址与用户表,也是通过数据库(如果你用在内存中使用,我也没办法)进行耦合的.
0 请登录后投票
论坛首页 Java企业应用版

跳转论坛:
Global site tag (gtag.js) - Google Analytics