S2SH項目登錄攔截的回顧(補)

   以前學三大框架的時候也沒怎麼作總結,此次回顧就把總結寫一下。java

   搭建好S2SH的框架後,在web-INF下創建對應對應的文件夾裏邊放着不能由URL直接訪問的那些頁面。在WEB-INF下的頁面都是不能直接訪問的。同時,CSS和JS還有圖片的文件夾和WEB-INF所在的文件夾是同級的。web

   在這樣的狀況下,除了登錄的login.jsp能被url訪問外,其餘的頁面都須要經過action來進行跳轉控制。那麼如今就須要對未登陸的非法action請求進行控制。經過struts2的攔截器來實現。實現以下:session

<interceptors>
         <interceptor name="loginJudge" class="com.rbac.interceptor.UsrLoginInterceptor">
         </interceptor>    
         <!-- 自定義攔截器棧-->
       <interceptor-stack name="myDefaultStack">
       <interceptor-ref name="loginJudge">
           </interceptor-ref>
       <interceptor-ref name="defaultStack">
          </interceptor-ref>

       </interceptor-stack>
</interceptors>

               <!-- 將自定義攔截器棧設置默認的攔截器 -->
         <default-interceptor-ref name="myDefaultStack"></default-interceptor-ref>
<global-results>
     <result name="login" type="redirect">/login.jsp</result>
</global-results>
      

 

  寫一個攔截器:框架

 1 package com.rbac.interceptor;
 2 
 3 import java.util.Map;
 4 
 5 import com.opensymphony.xwork2.Action;
 6 import com.opensymphony.xwork2.ActionInvocation;
 7 import com.opensymphony.xwork2.interceptor.AbstractInterceptor;
 8 import com.rbac.action.LoginAction;
 9 
10 public class UsrLoginInterceptor extends AbstractInterceptor{
11     
12     //先判斷用戶是否登錄,若是尚未登錄,若沒有登錄則爲非法請求,進行攔截。
13     @Override
14     public String intercept(ActionInvocation arg0) throws Exception {
15         //判斷請求是否爲登錄的請求,若是是登錄請求則不攔截。
16         if(LoginAction.class==arg0.getAction().getClass())
17         {
18             return arg0.invoke();
19         }
20         //若是是其餘action的請求,進行攔截
21         Map map =
22                arg0.getInvocationContext().getSession();
23         if(null==map.get("username"))
24         {
25             return Action.LOGIN;
26         }
27 
28         return arg0.invoke();
29     }
30     
31 
32 }

在loginAction中的execute方法中,驗證成功後把用戶名寫到session中:jsp

public String execute() throws Exception {
        String hql="from Master where name=? and password=?";
         Map map = ActionContext.getContext().getSession();
        if(    hibernateTemplate.find(hql, new String[]{username,password}).size()==0)
        {
            return LOGIN;
        }else{
            map.put("username", username);
            return SUCCESS;
        }
        

    }

這樣就完成了全部的步驟。固然了,這只是個實驗而已~具體的程序還在不斷地修修補補中。ide

<interceptors>
         <interceptor name="loginJudge" class="com.rbac.interceptor.UsrLoginInterceptor">
         </interceptor>
         
         <!-- 自定義攔截器棧-->
       <interceptor-stack name="myDefaultStack">

       <interceptor-ref name="loginJudge">
          </interceptor-ref>
       <interceptor-ref name="defaultStack">
          </interceptor-ref>
 
       </interceptor-stack>
</interceptors> 
相關文章
相關標籤/搜索