struts2登录拦截器

Struts2使用拦截器完成权限控制示例
关键字: struts2 权限控制
示例需求:
   要求用户登录,且必须为指定用户名才可以查看系统中某个视图资源;否则,系统直接转入登陆页面。

一、页面部分
1、登陆页面代码(login.jsp)
Java代码

    
<%@ page language="java" contentType="text/html; charset=GBK"%>  
    
<%@taglib prefix="s" uri="/struts-tags"%>  
    
<html>  
        
<head>  
            
<title><s:text name="loginPage" /></title>  
        
</head>  
        
<body>  
            
<!-- 使用form标签生成表单元素 -->  
            
<s:form action="login">  
               
<s:textfield name="username" label="%{getText('user')}" />  
               
<s:textfield name="password" label="%{getText('pass')}" />  
               
<s:submit value="%{getText('login')}" />  
           
</s:form>  
       
</body>  
   
</html>  

 

2、登陆成功页面(welcome.jsp)
Java代码

    
<%@ page language="java" contentType="text/html; charset=GBK"%>  
    
<%@taglib prefix="s" uri="/struts-tags"%>  
    
<html>  
        
<head>  
            
<title><s:text name="succPage" /></title>  
            
<s:head />  
        
</head>  
        
<body>  
            
<s:text name="succTip" />  
           
<br />  
           
<!-- 欢迎,${sessionScope.user},您已经登录!  
           ${sessionScope.pass}
-->  
           
</>  
           
<s:a href="show.action">show</s:a>  
           
</>  
           
<s:a href="add.action">add</s:a>  
           
</>  
           
<s:a href="qurey.action">qurey</s:a>  
       
</body>  
   
</html>  


 

3、登陆失败页面(error.jsp)
Java代码

    
<%@ page language="java" contentType="text/html; charset=GBK"%>  
    
<%@taglib prefix="s" uri="/struts-tags"%>  
    
<html>  
        
<head>  
            
<title><s:text name="errorPage" /></title>  
        
</head>  
        
<body>  
            
<s:text name="failTip" />  
            
</>  
           
<s:a href="login.jsp">return</s:a>  
       
</body>  
   
</html>  


 

4、和权限有关的几个显示页面
(add.jsp)
Java代码

    
<%@ page language="java" contentType="text/html; charset=GBK"%>  
    
<%@taglib prefix="s" uri="/struts-tags"%>  
    
<html>  
        
<head>  
            
<title><s:text name="addPage"/></title>  
        
</head>  
        
<body>  
            
<s:text name="addTip"/>  
            
</>  
           
<s:a href="login.jsp">return login</s:a>  
       
</body>  
   
</html>  


 

(show.jsp)
Java代码

    
<%@ page language="java" contentType="text/html; charset=GBK"%>  
    
<%@taglib prefix="s" uri="/struts-tags"%>  
    
<html>  
        
<head>  
            
<title><s:text name="showPage"/></title>  
        
</head>  
        
<body>  
            
<s:text name="showTip"/>  
            
</>  
           
<s:a href="login.jsp">return login</s:a>  
       
</body>  
   
</html>  


 

(qurey.jsp)
Java代码

    
<%@ page language="java" contentType="text/html; charset=GBK"%>  
    
<%@taglib prefix="s" uri="/struts-tags"%>  
    
<html>  
        
<head>  
            
<title><s:text name="qureyPage"/></title>  
        
</head>  
        
<body>  
            
<s:text name="qureyTip"/>  
            
</>  
           
<s:a href="login.jsp">return login</s:a>  
       
</body>  
   
</html>  

<
 

二、Action部分(LoginAction.java)
Java代码

    
public class LoginAction extends ActionSupport {  
        
private static final long serialVersionUID = 1030294046920869257L;  
        
private String username;  
        
private String password;  
      
        
// 处理用户请求的execute方法  
        public String execute() throws Exception {  
            
if (isInvalid(getUsername()))  
                
return INPUT;  
     
           
if (isInvalid(getPassword()))  
               
return INPUT;  
     
           
if ((getUsername().equals("mm"|| getUsername().equals("aumy"))  
                   
&& getPassword().equals("111")) {  
               
// 通过ActionContext对象访问Web应用的Session  
               ActionContext.getContext().getSession().put("user", getUsername());  
               ActionContext.getContext().getSession().put(
"pass", getPassword());  
               System.out.println(getUsername() 
+ "----" + getPassword());  
               
return SUCCESS;  
           } 
else {  
               System.out.println(getUsername() 
+ "----" + getPassword());  
               
return ERROR;  
           }  
       }  
     
       
private boolean isInvalid(String value) {  
           
return (value == null || value.length() == 0);  
       }  
     
       
public String add() {  
           
return SUCCESS;  
       }  
     
       
public String show() {  
           
return SUCCESS;  
       }  
     
       
public String qurey() {  
           
return SUCCESS;  
       }  
     
       
public String getUsername() {  
           
return username;  
       }  
     
       
public void setUsername(String username) {  
           
this.username = username;  
       }  
     
       
public String getPassword() {  
           
return password;  
       }  
     
       
public void setPassword(String password) {  
           
this.password = password;  
       }  
   }  

 

三、拦截器部分(AuthorityInterceptor.java)
Java代码

    
public class AuthorityInterceptor extends AbstractInterceptor {  
        
private static final long serialVersionUID = 1358600090729208361L;  
      
        
//拦截Action处理的拦截方法  
        public String intercept(ActionInvocation invocation) throws Exception {  
            
// 取得请求相关的ActionContext实例  
            ActionContext ctx=invocation.getInvocationContext();  
            Map session
=ctx.getSession();  
            
//取出名为user的session属性  
           String user=(String)session.get("user");  
           
//如果没有登陆,或者登陆所有的用户名不是aumy,都返回重新登陆  
           if(user!=null && user.equals("aumy")){  
               
return invocation.invoke();  
           }  
           
//没有登陆,将服务器提示设置成一个HttpServletRequest属性  
           ctx.put("tip","您还没有登录,请登陆系统");  
           
return Action.LOGIN;          
       }  
   }  


 

四、配置文件部分
(struts.xml)
Java代码

    
<!DOCTYPE struts PUBLIC  
            
"-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"  
            
"http://struts.apache.org/dtds/struts-2.0.dtd">   
    
<struts>   
        
<include file="struts-default.xml"/>  
        
<!--不受权限控制的Action请求配置-->  
        
<package name="non-authority" extends="struts-default" >        
            
<action name="login" class="com.aumy.struts.example.LoginAction">  
                
<result name="input">/login.jsp</result>  
               
<result name="error">/error.jsp</result>  
               
<result name="success">/welcome.jsp</result>  
           
</action>       
           
<action name="qurey" class="com.aumy.struts.example.LoginAction" method="qurey">  
               
<result name="success">/qurey.jsp</result>  
           
</action>  
     
       
</package>  
         
       
<!--受权限控制的Action请求配置-->  
       
<package name="authority" extends="struts-default">  
           
<interceptors>  
               
<!--定义一个名为authority的拦截器-->  
               
<interceptor  
                   
class="com.aumy.struts.example.intercepter.AuthorityInterceptor"  
                   name
="authority"/>  
               
<!--定义一个包含权限检查的拦截器栈-->  
               
<interceptor-stack name="mydefault">  
                   
<!--配置内建默认拦截器-->  
                   
<interceptor-ref name="defaultStack"/>  
                   
<!--配置自定义的拦截器-->  
                   
<interceptor-ref name="authority"/>  
               
</interceptor-stack>  
           
</interceptors>  
             
           
<default-interceptor-ref name="mydefault" />  
           
<!--定义全局Result-->  
           
<global-results>  
               
<result name="login">/login.jsp</result>  
           
</global-results>  
             
           
<action name="show" class="com.aumy.struts.example.LoginAction"  
               method
="show">  
               
<result name="success">/show.jsp</result>  
           
</action>  
             
           
<action name="add" class="com.aumy.struts.example.LoginAction"  
               method
="add">  
               
<result name="success">/add.jsp</result>  
           
</action>  
             
       
</package>  
   
</struts>  



 

(struts.properties)
Java代码

   struts.custom.i18n.resources
=message.messageResouce  


 

(web.xml)
Java代码

    
<?xml version="1.0" encoding="UTF-8"?>  
    
<web-app version="2.4"   
        xmlns
="http://java.sun.com/xml/ns/j2ee"   
        xmlns:xsi
="http://www.w3.org/2001/XMLSchema-instance"   
        xsi:schemaLocation
="http://java.sun.com/xml/ns/j2ee   
        http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">  
        <display-name>Struts test</display-name>  
      
        
<filter>  
           
<filter-name>struts2</filter-name>  
           
<filter-class>org.apache.struts2.dispatcher.FilterDispatcher</filter-class>  
       
</filter>  
     
       
<filter-mapping>  
           
<filter-name>struts2</filter-name>  
           
<url-pattern>/*</url-pattern>  
       </filter-mapping>  
     
     
       <welcome-file-list>  
           <welcome-file>login.jsp</welcome-file>  
       </welcome-file-list>  
   </web-app>  


五、国际化资源文件(messageResouce.properties)
Java代码

    loginPage=Login Page  
    errorPage=Error Page  
    succPage=Welcome Page  
    failTip=Sorry,You can't log in!  
    succTip=welcome,you has logged in!   
    user=User Name  
    pass=User Pass  
    login=Login  
    showPage=Show Page  
    showTip=show a example!  
    addPage=Add Page  
    addTip=add a example!  
    qureyPage=Qurey Page  
    qureyTip=qurey a example!

posted on 2009-12-15 18:38  草原和大树  阅读(2836)  评论(0编辑  收藏  举报