Struts2自定义拦截器实例—登陆权限验证

版本:struts2.1.6

此实例实现功能:用户需要指定用户名登陆,登陆成功进入相应页面执行操作,否则返回到登陆页面进行登陆,当直接访问操作页面(登陆后才能访问的页面)时则不允许,须返回登陆页面。

代码如下:

一、页面

login.jsp

 

[xhtml] view plaincopy
  1. <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>  
  2.   
  3. <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">  
  4. <html>  
  5.   <head>    
  6.     <title>yuewei'Login</title>   
  7.     <!-- 
  8.     <link rel="stylesheet" type="text/css" href="styles.css" mce_href="styles.css"> 
  9.     -->  
  10.   </head>  
  11.     
  12.   <body>  
  13.   <form action="login.action" method="post">  
  14.   User:<input type="text" name="username"><br>  
  15.   Passoword:<input type="password" name="password"><br>  
  16.   <input type="submit" value="submit">  
  17.   </form>  
  18.      
  19. </body>  
  20. </html>  

 

welcome.jsp

 

[xhtml] view plaincopy
  1. <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>  
  2. <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">  
  3. <html>  
  4.   <head>  
  5.      
  6.     <title> yuewei's Welcome</title>  
  7.       
  8.  <!-- 
  9.  <link rel="stylesheet" type="text/css" href="styles.css" mce_href="styles.css"> 
  10.  -->  
  11.   
  12.   </head>  
  13.     
  14.   <body>  
  15.   <h1>登录成功后显示此页面</h1>  
  16.   <a href="show.action" mce_href="show.action">show</a>  
  17.   </body>  
  18. </html>  

 

show.jsp

 

[xhtml] view plaincopy
  1. <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>  
  2.   
  3. <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">  
  4. <html>  
  5.   <head>  
  6.       
  7.     <title>yuewei's Show</title>  
  8.       
  9.     <!-- 
  10.     <link rel="stylesheet" type="text/css" href="styles.css" mce_href="styles.css"> 
  11.     -->  
  12.   
  13.   </head>  
  14.     
  15.   <body>  
  16.     Show This Page   
  17.         登录后执行此页面<br>  
  18.   </body>  
  19. </html>  

 

 

二、Action

LoginFormAction

 

  1. package com.ywjava.action;  
  2.   
  3. import com.opensymphony.xwork2.ActionSupport;  
  4.   
  5. public class LoginFormAction extends ActionSupport {  
  6.     public String exexcute() {  
  7.         return "success";  
  8.     }  
  9. }  

 

LoginAction

 

  1. package com.ywjava.action;  
  2.   
  3. import com.opensymphony.xwork2.ActionContext;  
  4. import com.opensymphony.xwork2.ActionSupport;  
  5. import com.ywjava.utils.Constants;  
  6.   
  7. public class LoginAction extends  ActionSupport{  
  8. private String username;  
  9. private String password;  
  10. public String getPassword() {  
  11.     return password;  
  12. }  
  13. public void setPassword(String password) {  
  14.     this.password = password;  
  15. }  
  16. public String getUsername() {  
  17.     return username;  
  18. }  
  19. public void setUsername(String username) {  
  20.     this.username = username;  
  21. }  
  22.   
  23. private boolean isInvalid(String value) {     
  24.     return (value == null || value.length() == 0);     
  25. }     
  26. public String execute(){  
  27.         System.out.println(username);  
  28.         System.out.println(password);  
  29.           
  30.          if (isInvalid(getUsername()))     
  31.                 return INPUT;     
  32.         
  33.             if (isInvalid(getPassword()))     
  34.                 return INPUT;     
  35.         
  36.   
  37.     if(this.getUsername().equals("yuewei")&& this.getPassword().equals("yuewei")){  
  38.         ActionContext.getContext().getSession().put(Constants.USER_SESSION,getUsername());  
  39.         ActionContext.getContext().getSession().put(Constants.PASS,getPassword());  
  40.         return "success";  
  41.     }  
  42.     return "error";  
  43. }  
  44. }  

 

ShowAction

 

  1. package com.ywjava.action;  
  2.   
  3. import com.opensymphony.xwork2.ActionSupport;  
  4.   
  5. public class ShowAction extends ActionSupport {  
  6.  public String execute() {  
  7.   return "success";  
  8.  }  
  9. }  

 

三、拦截器

 

  1. package com.ywjava.interceptot;  
  2.   
  3. import java.util.Map;  
  4.   
  5. import com.opensymphony.xwork2.Action;  
  6. import com.opensymphony.xwork2.ActionContext;  
  7. import com.opensymphony.xwork2.ActionInvocation;  
  8. import com.opensymphony.xwork2.interceptor.AbstractInterceptor;  
  9. import com.ywjava.utils.Constants;  
  10.   
  11. public class LoginInterceptor extends AbstractInterceptor {  
  12.   
  13.     @Override  
  14.     public String intercept(ActionInvocation invocation) throws Exception {  
  15.   
  16.         // 取得请求相关的ActionContext实例  
  17.         ActionContext ctx = invocation.getInvocationContext();  
  18.         Map session = ctx.getSession();  
  19.         String user = (String) session.get(Constants.USER_SESSION);  
  20.   
  21.         // 如果没有登陆,或者登陆所有的用户名不是yuewei,都返回重新登陆  
  22.   
  23.         if (user != null && user.equals("yuewei")) {  
  24.             System.out.println("test");  
  25.             return invocation.invoke();  
  26.         }  
  27.   
  28.         ctx.put("tip""你还没有登录");  
  29.         return Action.LOGIN;  
  30.   
  31.     }  
  32.   
  33. }  

 

四 struts.xml

 

[c-sharp] view plaincopy
  1. <?xml version="1.0" encoding="UTF-8"?>  
  2. <!DOCTYPE struts PUBLIC  
  3.     "-//Apache Software Foundation//DTD Struts Configuration 2.1//EN"  
  4.     "http://struts.apache.org/dtds/struts-2.1.dtd">  
  5. <struts>  
  6.     <package name="authority" extends="struts-default">  
  7.       
  8.         <!-- 定义一个拦截器 -->  
  9.         <interceptors>  
  10.             <interceptor name="authority"  
  11.                 class="com.ywjava.interceptot.LoginInterceptor">  
  12.             </interceptor>  
  13.             <!-- 拦截器栈 -->  
  14.             <interceptor-stack name="mydefault">  
  15.                 <interceptor-ref name="defaultStack" />  
  16.                 <interceptor-ref name="authority" />  
  17.             </interceptor-stack>  
  18.         </interceptors>  
  19.   
  20.         <!-- 定义全局Result -->  
  21.         <global-results>  
  22.             <!-- 当返回login视图名时,转入/login.jsp页面 -->  
  23.             <result name="login">/login.jsp</result>  
  24.         </global-results>  
  25.   
  26.         <action name="loginform"  
  27.             class="com.ywjava.action.LoginFormAction">  
  28.             <result name="success">/login.jsp</result>  
  29.         </action>  
  30.           
  31.         <action name="login" class="com.ywjava.action.LoginAction">  
  32.             <result name="success">/welcome.jsp</result>  
  33.             <result name="error">/login.jsp</result>  
  34.             <result name="input">/login.jsp</result>  
  35.         </action>  
  36.   
  37.         <action name="show" class="com.ywjava.action.ShowAction">  
  38.             <result name="success">/show.jsp</result>  
  39.             <!-- 使用此拦截器 -->  
  40.             <interceptor-ref name="mydefault" />  
  41.         </action>  
  42.           
  43.     </package>  
  44. </struts>  

 

这篇文章我用到的关键地方是struts.xml配置文件中对自定义拦截器的配置

<!-- 定义一个拦截器 -->  
        <interceptors>  
            <interceptor name="authority"  
                class="com.ywjava.interceptot.LoginInterceptor">  
            </interceptor>  
            <!-- 拦截器栈 -->  
            <interceptor-stack name="mydefault">  
                <interceptor-ref name="defaultStack" />  
                <interceptor-ref name="authority" />  
            </interceptor-stack>  
        </interceptors>  

<!--在Action中使用拦截器-->

	<action name="show" class="com.ywjava.action.ShowAction">  
            <result name="success">/show.jsp</result>  
            <!-- 使用此拦截器 -->  
            <interceptor-ref name="mydefault" />  
        </action> 

 

 另外还有第三部分的自定义拦截器的编写

转自:http://blog.csdn.net/java_cxrs/article/details/5514340

posted @ 2013-12-16 22:14  山貓  阅读(261)  评论(0编辑  收藏  举报