Struts2實現訪問控制

dawn009發表於2014-06-12
今天在專案中實現了訪問控制,較之其他功能簡單很多,總結一下:
在SSH框架之下,最基本的是要實現訪問控制。
主要思想就是使用攔截器控制action的訪問,使用jsp程式碼控制jsp頁面的訪問。
對Action的訪問控制:
攔截器需要制定攔截除了LoginAction和LogoutAction之外的所有Action
一般是宣告一些攔截器攔截器,然後將某些攔截器組合成攔截器棧:
<!-- 定義攔截器,在使用者訪問受保護資源之前判斷其是否登入 --&gt

    <!-- 攔截器 --&gt
   
          
    <!-- 定義一個攔截器棧 --&gt
   
       
       
   


然後在Action配置中制定需要使用的攔截器:

    yndw_1.jsp
    error.jsp
   

但是不可能在所有的Action配置中都加上

 
可以這樣做:
新建1+1+n個包
第一個包宣告登入登出等不需要攔截的Action:
    
<!-- class屬性對應IoC容器中的BeanId,因為struts將Action託管給Spring了 --&gt
   
       
           yndwAction
           /
       

        返回input結果,若找不到input型別,就會嘗試用action的class去建立一個
action,導致action未知型別的錯誤 --&gt
       /login.jsp
   
   
   
       login.jsp
   


第二個包宣告攔截器,然後定義為預設攔截器:

    <!-- 定義攔截器,在使用者訪問受保護資源之前判斷其是否登入 --&gt
   
       <!-- 攔截器 --&gt
        class="com.jsjl.interceptor.LoginAuthenInterceptor" />
       <!-- 定義一個攔截器棧 --&gt
       
           
           
       

   
    
    <!-- 在這個包中宣告一個預設的攔截器對於action資源直接訪問,使用攔截器,對於頁面直接訪問,頁面中判斷--&gt
        
    <!-- 如果一個結果在多個Action或者攔截器中使用,就應該將其配置為全域性結果,注意型別為redirect --&gt
   
       /login.jsp
   


然後其他N和包,都繼承自第二個包,這樣就預設繼承了第二個包的預設的攔截器:

就這樣,訪問除了第一個包中的所有Action都會透過攔截器判斷使用者是否登入,否則轉到登陸頁面。
然後對於jsp頁面的訪問控制,只需要在頁面開始加上以下幾句即可:
    Object isLogin = session.getAttribute("isLogin");
    if(isLogin == null){    
       response.sendRedirect("login.jsp");
    }
%>
攔截器是這樣的:
public class LoginAuthenInterceptor extends AbstractInterceptor {
    public String intercept(ActionInvocation invocation) throws Exception {
       ActionContext context = ActionContext.getContext();
       Map session = context.getSession();
       Object user = session.get("isLogin");
       if(user == null){
           return "login";
       }
       return invocation.invoke();
    }
}
 
 
對JSP頁面的訪問控制:
在頁面開頭加入如下jsp程式碼即可:
   String greeting = "";
%>
   UserBean user = (UserBean)session.getAttribute("user");
   if(user == null){
       response.sendRedirect("login.jsp");
   }
   else greeting = user.getNiname();
%>

----------------------&gt>轉載於:http://blog.sina.com.cn/s/blog_6a1928130100ughg.html



配置檔案部分 
(struts.xml)
 
nbsp;       
                "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"     
                "http://struts.apache.org/dtds/struts-2.0.dtd">         
         
        "struts-default.xml"
/>        
        <!--不受許可權控制的Action請求配置--&gt        
        <package name="non-authority" extends="struts-default" >                    
                "login"
 class="com.aumy.struts.example.LoginAction">        
                        "input">/login.jsp        
                        "error">/error.jsp        
                        "success">/welcome.jsp        
                                 
                "qurey" class="com.aumy.struts.example.LoginAction" method="qurey">        
                        "success">/qurey.jsp        
                
        
     
        package>        
                
        <!--受許可權控制的Action請求配置--&gt        
        <package name="authority" extends="struts-default">        
                        
                        <!--定義一個名為authority的攔截器--&gt        
                                                         class="com.aumy.struts.example.intercepter.AuthorityInterceptor"     
                                name="authority"/>        
                        <!--定義一個包含許可權檢查的攔截器棧--&gt        
                        "mydefault">        
                                <!--配置內建預設攔截器--&gt        
                                "defaultStack"/>        
                                <!--配置自定義的攔截器--&gt        
                                "authority"/>        
                        
        
                
        
                        
                <default-interceptor-ref name="mydefault" />        
                <!--定義全域性Result--&gt        
                        
                        "login">/login.jsp        
                
        
                        
                "show" class="com.aumy.struts.example.LoginAction"     
                        method="show">        
                        "success">/show.jsp        
                
        
                        
                "add" class="com.aumy.struts.example.LoginAction"     
                        method="add">        
                        "success">/add.jsp        
                
        
                        
        package>        
     
 
(struts.properties)
struts.custom.i18n.resources=message.messageResouce    
 
(web.xml)

相關文章