论坛首页 Java版 Struts

struts 2拦截器 的问题

浏览 331 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
时间:2008-04-18
判断用户登录过,就不用登录,但是拦截器根本就没执行
xml文件
<struts>
	<!-- Configuration for the default package. -->
	<package name="sysaction" extends="struts-default"
		namespace="/sysaction">
		<interceptors>
			<interceptor name="authentication"
				class="sysaction.LogonInterceptor" />
			<interceptor-stack name="myStack">
				<interceptor-ref name="defaultStack" />
				<interceptor-ref name="authentication"></interceptor-ref>
			</interceptor-stack>
		</interceptors>
		<default-interceptor-ref name="myStack" />
		<global-results>
			<result name="login">/sysjsp/first.jsp</result>
		</global-results>
		<action name="login" class="sysaction.loginaction"
			method="login">
			<interceptor-ref name="paramsPrepareParamsStack" />
			<result>/sysjsp/welcome.jsp</result>
			<result name="error">/sysjsp/error.jsp</result>
		</action>
	</package>
</struts>

action
private String loginName;
	private String passworld;
	private Map session;
	
	public void setSession(Map session) {
		this.session = session;
	}
	public String login() throws Exception {
		
		String username = loginName;
		String mima = passworld;
		SysuserImp sysuserImp = new SysuserImp();
	
		List user;
		user = sysuserImp.QuerySysuser(username, mima);//查询数据库中数据
		if (user.size() != 0) {
			Sysuser sysuser = (Sysuser) user.get(0);
			String name = sysuser.getAdminName();
			
			session.put("usersession", sysuser);
			return this.SUCCESS;
		} else {
			return this.ERROR;
		}

	}

拦截器
public class LogonInterceptor extends AbstractInterceptor {
	 public String intercept(ActionInvocation ai) throws Exception {  
		         Map session = ai.getInvocationContext().getSession();  
		         Sysuser usersession = (Sysuser) session.get("usersession");  
		         if (null !=usersession) { 	        	
		             return ai.invoke();  
		         } else { 
		             return Action.LOGIN;  
		         }  
		     }  
}
   
时间:2008-04-18

<action name="login" class="sysaction.loginaction"
method="login">
<interceptor-ref name="paramsPrepareParamsStack" />
<result>/sysjsp/welcome.jsp</result>
<result name="error">/sysjsp/error.jsp</result>
</action>

改成

<action name="login" class="sysaction.loginaction"
method="login">
<result>/sysjsp/welcome.jsp</result>
<result name="error">/sysjsp/error.jsp</result>
</action>
试试。


但是这样的话,也有一个问题,就是你当前包下的所有action都会被LogonInterceptor 拦截。但登录操作如果在别的包下,也许就不是问题了。

下面是我的作法:



<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
"http://struts.apache.org/dtds/struts-2.0.dtd">

<struts>
<package name="default" extends="struts-default">
<interceptors>
<interceptor name="authentication"
class="com.leo.interceptor.LogonInterceptor" />
<interceptor-stack name="myStack">
<interceptor-ref name="defaultStack" />
<interceptor-ref name="authentication"></interceptor-ref>
</interceptor-stack>
</interceptors>

<global-results>
<result name="login">/error.jsp</result>
</global-results>

<action name="hello" class="com.leo.action.HelloAction">
<interceptor-ref name="myStack"/>
<result>/index.jsp</result>
</action>

<action name="login" class="com.leo.action.LoginAction">
<result type="redirect-action">
<param name="actionName">hello</param>
<param name="namespace">/</param>
</result>
</action>

</package>
</struts>


hello是受保护的action, login是用来登录的,这样就可以达到预期目标,但实际真实代码我可能不会这么写,这里仅仅是说明。
   
0 请登录后投票
论坛首页 Java版 Struts

跳转论坛:
JavaEye推荐