以前學三大框架的時候也沒怎麼作總結,此次回顧就把總結寫一下。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>