struts2_全局的攔截器,攔截用戶非法登陸


struts都是通過action來請求頁面的,所以可以通過全局的攔截器來攔截用戶的非法登陸,如果用戶知道jsp頁面的地址,這種情況基本不會出現,那就需要用過濾器對頁面進行過濾攔截了.

這里用攔截器進行攔截.

firtpart.xml:(設定默認的攔截器,每個Action都會默認調用)

 1 <?xml version="1.0" encoding="UTF-8"?>
 2 <!DOCTYPE struts PUBLIC
 3     "-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"
 4     "http://struts.apache.org/dtds/struts-2.3.dtd">
 5 
 6 <struts>
 7     <package name="test" extends="struts-default" namespace="/test">
 8 
 9         <interceptors>
10             <interceptor name="loginJudge"
11                 class="com.sunflower.interceptor.UsrLoginInterceptor">
12             </interceptor>
13 
14             <!-- 自定義攔截器棧 -->
15             <interceptor-stack name="myDefaultStack">
16                 <interceptor-ref name="loginJudge"></interceptor-ref>
17                 <interceptor-ref name="defaultStack"></interceptor-ref>
18             </interceptor-stack>
19         </interceptors>
20 
21         <!-- 將自定義攔截器棧設置默認的攔截器 -->
22         <default-interceptor-ref name="myDefaultStack"></default-interceptor-ref>
23 
24         <global-results>
25     <result name="login" type="redirect">/login.jsp</result>
26         </global-results>
27 
28         <action name="logintest" class="com.sunflower.action.LoginAction">
29             <result name="success" type="redirectAction">
30                 <param name="actionName">sayhello</param>
31                 <param name="namespace">/test</param>
32                 <param name="username">${username}</param>
33             </result>
34         </action>
35         
36         <action name="sayhello" class="com.sunflower.action.SayHelloAction">
37             <result name="success">/welcome.jsp</result>
38             <result name="login">/login.jsp</result>
39         </action>
40     </package>
41 </struts>

 

 sturts.xml:(引用firtpart.xml)

1 <?xml version="1.0" encoding="UTF-8"?>
2 <!DOCTYPE struts PUBLIC
3     "-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"
4     "http://struts.apache.org/dtds/struts-2.3.dtd">
5 
6 
7 <struts>
8     <include file="firtpart.xml"></include>
9 </struts>

 

UsrLoginInterceptor.java:(攔截器,對所有Action攔截,除了登陸Action)

 1 package com.sunflower.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.sunflower.action.LoginAction;
 9 
10 /**
11  * 用戶攔截器,每個頁面都會用到
12  * 
13  * @author hanyuan
14  * @time 2012-6-6 下午12:38:05
15  */
16 public class UsrLoginInterceptor extends AbstractInterceptor {
17 
18     /**
19      * 判斷用戶是否已經登錄,如果沒有登錄,則為非法請求,進行攔截
20      */
21     public String intercept(ActionInvocation arg0) throws Exception {
22         // 判斷是否請求為登錄界面(login),如果是則不攔截
23         if (LoginAction.class == arg0.getAction().getClass())
24             return arg0.invoke();
25         
26         
27         // 如果是請求其他頁面,進行攔截
28         Map map = arg0.getInvocationContext().getSession();
29         if (null == map.get("username"))
30             return Action.LOGIN;
31 
32         return arg0.invoke();
33     }
34 
35 }

 

 

 LoginAction.java:(進行登陸校驗)

 1 package com.sunflower.action;
 2 
 3 import java.util.Map;
 4 
 5 import com.opensymphony.xwork2.ActionContext;
 6 import com.opensymphony.xwork2.ActionSupport;
 7 import com.sunflower.util.UserExist;
 8 
 9 public class LoginAction extends ActionSupport {
10     private String username;
11     private String password;
12 
13     public String getUsername() {
14         return username;
15     }
16 
17     public void setUsername(String username) {
18         this.username = username;
19     }
20 
21     public String getPassword() {
22         return password;
23     }
24 
25     public void setPassword(String password) {
26         this.password = password;
27     }
28 
29     public String execute() throws Exception {
30         // 設置session
31         Map map = ActionContext.getContext().getSession();
32         // 如果用戶存在
33         if (UserExist.isExist(username, password)) {
34             if (null == map.get("username"))
35                 map.put("username", username);
36             return SUCCESS;
37         }
38 
39         return LOGIN;
40     }
41 }

 

 

SayHelloAction.java:(轉向歡迎界面的action)

 1 package com.sunflower.action;
 2 
 3 import com.opensymphony.xwork2.ActionSupport;
 4 
 5 public class SayHelloAction extends ActionSupport {
 6     String username;
 7 
 8     public String getUsername() {
 9         return username;
10     }
11 
12     public void setUsername(String username) {
13         this.username = username;
14     }
15 
16     public String execute() throws Exception {
17         return SUCCESS;
18     }
19 }

 

 

UserExist.java:(模擬用戶校驗的類)

 1 package com.sunflower.util;
 2 
 3 public class UserExist {
 4     //判斷用戶是否存在
 5     public static boolean isExist(String username, String password)
 6     {
 7         String name = username.trim();
 8         String word = password.trim();
 9         
10         if(name.equals("yuan") && word.equals("123"))
11             return true;
12         return false;
13     }
14 }    

 

 

login.jsp:

 1 <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
 2 <%@ taglib prefix="s" uri="/struts-tags"%>
 3 <%
 4     String path = request.getContextPath();
 5     String basePath = request.getScheme() + "://" + request.getServerName() + ":" + request.getServerPort() + path + "/";
 6 %>
 7 
 8 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
 9 <html>
10     <head>
11         <base href="<%=basePath%>">
12 
13         <title>登錄界面</title>
14         <meta http-equiv="pragma" content="no-cache">
15         <meta http-equiv="cache-control" content="no-cache">
16         <meta http-equiv="expires" content="0">
17         <meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
18         <meta http-equiv="description" content="This is my page">
19         <!--
20     <link rel="stylesheet" type="text/css" href="styles.css">
21     -->
22     </head>
23 
24     <body>
25         <center>
26             <font color="bule" size="20">用戶登錄</font>
27             <br>
28             <s:form action="test/logintest">
29                 <s:textfield name="username" label="用戶名:" size="20"></s:textfield>
30                 <s:textfield name="password" label="密碼:" size="20"></s:textfield>
31                 <s:submit value="提交"></s:submit>
32             </s:form>
33 
34         </center>
35     </body>
36 </html>

 

 

welcome.jsp:

 1 <%@ page language="java" contentType="text/html; charset=UTF-8"
 2     pageEncoding="UTF-8"%>
 3 <%@ taglib prefix="s" uri="/struts-tags"%>
 4 <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
 5 <html>
 6     <head>
 7         <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 8         <title>登陸成功</title>
 9     </head>
10     <body>
11         <center>
12             <s:property value="username"/>,恭喜你登錄成功!
13         </center>        
14     </body>
15 </html>

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM