论坛首页 Java企业应用论坛

Struts2.1拦截器总结

浏览 14383 次
精华帖 (0) :: 良好帖 (1) :: 新手帖 (7) :: 隐藏帖 (3)
作者 正文
   发表时间:2009-12-09  

今天没事干看了看struts2.1的拦截器部分,自己做了一个小例子,汇总一下,有需要的朋友也可以看看……

 

注:有关struts2.1的拦截器的概念东东我就不介绍了,自己可以去查查资料.

 

 

下面是本人写的登录实现拦截器的例子:

 

1. login.jsp

<s:form action="userLoginAction.action" method="post">
    	Username:<s:textfield name="user.username" /><br>
    	Password:<s:password name="user.password" /><br/>
    	
    	<s:submit value="Submit" /> &nbsp; <s:reset value="Reset" />
    </s:form>

 

 

2. struts.xml

<package name="User" extends="struts-default">
    	
       <!-- 设置自己创建的拦截器栈 -->
       <interceptors>   
            <interceptor name="loginInterceptor" class="org.com.ssh.action.LoginInterceptor"></interceptor>   
            <interceptor-stack name="loginDefaultStack">   
                <interceptor-ref name="loginInterceptor"></interceptor-ref>   
                <interceptor-ref name="defaultStack"></interceptor-ref>   
            </interceptor-stack>   
        </interceptors>
    	
        <global-results>   
            <result name="login" type="redirect">/login.jsp</result>
        </global-results>
    	    	
    	<action name="findUserAction" class="org.com.ssh.action.UserAction" method="FindUser">
    		<result>/index.jsp</result>
    		<!-- 此处引用拦截器 -->
    		<interceptor-ref name="loginDefaultStack"></interceptor-ref>
    	</action>
    	
    	<action name="userLoginAction" class="org.com.ssh.action.UserLoginAction" method="UserLogin">
    		<result name="success">/loginSuc.jsp</result>
    		<result name="error">/login.jsp</result>
    	</action>
    	 	
    </package>

 

注意:配置文件里最好使用全局转发的login代码

struts2 写道
<global-results>
<result name="login" type="redirect">/login.jsp</result>
</global-results>

 

3. UserLoginAction.java

private User user;
	
	@Autowired
	private UserService userservice;
	
	public User getUser() {
		return user;
	}

	public void setUser(User user) {
		this.user = user;
	}
	
	public UserService getUserservice() {
		return userservice;
	}

	public void setUserservice(UserService userservice) {
		this.userservice = userservice;
	}
	
	/**
	 * 验证登录用户是否正确
	 * @return tipMes
	 */
	public String UserLogin()
	{
		String tipMes = "";
		
		//MD5对密码进行加密
		MD5 m = new MD5();
		user.setPassword(m.getMD5ofStr(user.getPassword()));
		
		Boolean b = userservice.valLogin(user);
		
		if(b == true)
		{
			user = userservice.FindUserPro(user);
			ActionContext.getContext().getSession().put("user", user);
			
			return SUCCESS;
		}
		else
		{
			this.addFieldError(tipMes, "您输入的Username或者Password不匹配,请重新输入!");
			return ERROR;
		}
	}

 

 

4. LoginInterceptor.java

public class LoginInterceptor extends AbstractInterceptor {

	@Override
	public String intercept(ActionInvocation invocation) throws Exception {
		
	ActionContext actionContext = invocation.getInvocationContext();      
	           
	    Map session = actionContext.getSession();
	    
	    User user = (User)session.get("user");
	    
	    if (user == null){   
	        return Action.LOGIN;
	    }
	    else
	    {
	    	return invocation.invoke();
	    }
	}
}

 

5. loginSuc.jsp

<body>
    登录成功!
</body>

 

 

 

 

OK,简单的登录的拦截器就搞定了!

   发表时间:2009-12-10  
楼主何不自己实现一个拦截器,理解更深刻
0 请登录后投票
   发表时间:2009-12-10  
是的,感觉struts2的灵魂就是拦截器,其实自己实现一个也很简单,感觉要切实理解它流程,才能很灵活的搭配使用。
0 请登录后投票
   发表时间:2009-12-10  
asialee 写道
是的,感觉struts2的灵魂就是拦截器,其实自己实现一个也很简单,感觉要切实理解它流程,才能很灵活的搭配使用。

这个。。太抬举struts2的拦截器了吧。struts2的拦截器本身就是个AOP的实现。
0 请登录后投票
   发表时间:2009-12-10  
都是xwork做的
0 请登录后投票
   发表时间:2009-12-10  
呵呵,不过确实方便了不少,简单的实现以前复杂才能实现的东西就算好东西,拦截器这东西主要还是应用在实际中在实际分析如何配置了,理解了其实很简单,呵呵……
0 请登录后投票
   发表时间:2009-12-10  
怎么通过annotation来配置拦截器?好像这方面的资料很少
0 请登录后投票
   发表时间:2009-12-11  
用convention插件就可以通过annotation来配拦截器了
0 请登录后投票
   发表时间:2009-12-11  
这栏截器和过滤器有什么不一样的啊?
0 请登录后投票
   发表时间:2009-12-11  
楼主的拦截器和过滤器有得一拼
0 请登录后投票
论坛首页 Java企业应用版

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