亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

使用struts2攔截器如何實現對用戶進行權限控制

發布時間:2020-11-18 16:48:52 來源:億速云 閱讀:141 作者:Leah 欄目:編程語言

使用struts2攔截器如何實現對用戶進行權限控制?針對這個問題,這篇文章詳細介紹了相對應的分析和解答,希望可以幫助更多想解決這個問題的小伙伴找到更簡單易行的方法。

大多數網站會設置用戶權限,如過濾非法用戶,用戶不登錄時不能進行訪問,或者設置訪問的權限,如部分內容僅對VIP開放等等,這些權限的控制都可以用struts2中的攔截器來實現。

下面通過一個簡單的Demo來模擬這種用戶權限控制的實現流程,設定三種不同身份的用戶,commen為普通用戶,VIP為會員用戶,還有一種admin為管理員。

先看一下Demo的整體結構:

使用struts2攔截器如何實現對用戶進行權限控制

首先搭建struts2框架的開發環境(前面博客中有介紹),環境搭建完之后又再看一看如何配置struts.xml:

<&#63;xml version="1.0" encoding="UTF-8" &#63;> 
<!DOCTYPE struts PUBLIC 
 "-//Apache Software Foundation//DTD Struts Configuration 2.3//EN" 
 "http://struts.apache.org/dtds/struts-2.3.dtd"> 
<struts> 
 <package name="hello" extends="struts-default" namespace="/"> 
  <interceptors> 
   <interceptor name="testInterceptor" class="org.interceptor.InterceptorTest"></interceptor> 
   <!-- 一個攔截器棧中可以定義多個攔截器 --> 
   <interceptor-stack name="testStack"> 
    <interceptor-ref name="testInterceptor" /> 
    <interceptor-ref name="defaultStack" /> 
   </interceptor-stack> 
  </interceptors> 
  <!--全局結果處理 --> 
  <global-results> 
   <result name="error">/Error.jsp</result> 
  </global-results> 
  <action name="login" class="org.interceptor.LoginAction"> 
   <result>/WEB-INF/pages/index.jsp</result> 
  </action> 
  <action name="admin" class="org.interceptor.LoginAction" method="AdminExecute"> 
   <interceptor-ref name="testStack"></interceptor-ref> 
   <result>/WEB-INF/pages/admin.jsp</result> 
  </action> 
  <action name="vip" class="org.interceptor.LoginAction" method="vipExecute"> 
   <interceptor-ref name="testStack"></interceptor-ref> 
   <result>/WEB-INF/pages/vipUser.jsp</result> 
  </action> 
  <action name="commen" class="org.interceptor.LoginAction" method="commenExecute"> 
   <interceptor-ref name="testStack"></interceptor-ref> 
   <result>/WEB-INF/pages/commen.jsp</result> 
  </action> 
 </package> 
</struts> 

 其中,<global-results></global-results>是全局的result,有很多時候一個<result>可供很多<action>使用,這時可以使用<global-results>標簽來定義全局的<result>。執行順序:當一個Action返回的String沒有相應的<result>與之對應,Struts2就會查找全局的<result>,所以本次模擬測試中不符合條件被攔截的請求都會轉到error.jsp。

Action類,不做處理,全部放行,讓攔截器處理:

public class LoginAction implements SessionAware{ 
 @SuppressWarnings("unused") 
 private String username; 
 private Map<String,Object> session; 
 public void setUsername(String username) { 
  this.username = username; 
  session.put("username", username); 
 } 
 public void setSession(Map<String, Object> session) { 
  // TODO Auto-generated method stub 
  this.session = session; 
 } 
  
 public String AdminExecute(){ 
  return "success"; 
 } 
 public String vipExecute(){ 
  return "success"; 
 } 
 public String commenExecute(){ 
  return "success"; 
 } 
 public String execute(){ 
  return "success"; 
 } 
} 

Inteceptor(攔截器類):

public class LoginAction implements SessionAware{ 
 @SuppressWarnings("unused") 
 private String username; 
 private Map<String,Object> session; 
 public void setUsername(String username) { 
  this.username = username; 
  session.put("username", username); 
 } 
 public void setSession(Map<String, Object> session) { 
  // TODO Auto-generated method stub 
  this.session = session; 
 } 
  
 public String AdminExecute(){ 
  return "success"; 
 } 
 public String vipExecute(){ 
  return "success"; 
 } 
 public String commenExecute(){ 
  return "success"; 
 } 
 public String execute(){ 
  return "success"; 
 } 
} 

 只是 模擬攔截器的實現思路,沒有持久層的數據,這里的方法是使用invocation.getProxy().getActionName()方法來獲取struts.xml中配置的action名稱,和用戶表單提交的名稱做對比,如果輸入的用戶名是以action名開頭的,就放行,否則攔截。

登錄jsp:

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%> 
<% 
String path = request.getContextPath(); 
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/"; 
%> 
 
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> 
<html> 
 <head> 
 <base href="<%=basePath%>" rel="external nofollow" rel="external nofollow" >  
 <title>login</title> 
 </head> 
 
 <body> 
 <form action="login.action"> 
  <input type="text" name="username"/> 
  <input type="password" name="password"/> 
  <input type="submit" value="login"> 
 </form> 
 </body> 
</html> 

攔截后跳轉頁:

<body> 
 <h5>你的權限不足,請先升級權限...</h5> 
 </body> 

訪問資源代碼:

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%> 
<% 
String path = request.getContextPath(); 
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/"; 
%> 
 
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> 
<html> 
 <head> 
 <base href="<%=basePath%>" rel="external nofollow" rel="external nofollow" > 
 <title>index</title> 
 </head> 
 
 <body> 
 <a href="admin.action" rel="external nofollow" >admin</a><br/> 
 <a href="vip.action" rel="external nofollow" >vip</a><br/> 
 <a href="commen.action" rel="external nofollow" >commen</a> 
 </body> 
</html> 

其余admin.jsp等界面沒有內容,只是為了區分實現跳轉頁面不同。

運行結果:

使用commen角色登錄:

使用struts2攔截器如何實現對用戶進行權限控制

點擊VIP以及admin跳轉鏈接時:

使用struts2攔截器如何實現對用戶進行權限控制

關于使用struts2攔截器如何實現對用戶進行權限控制問題的解答就分享到這里了,希望以上內容可以對大家有一定的幫助,如果你還有很多疑惑沒有解開,可以關注億速云行業資訊頻道了解更多相關知識。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

新和县| 保德县| 江山市| 烟台市| 科技| 金寨县| 绥中县| 衡水市| 班玛县| 平果县| 云阳县| 荣成市| 盖州市| 龙陵县| 睢宁县| 甘孜县| 池州市| 长沙市| 波密县| 鄂尔多斯市| 晋州市| 茌平县| 紫金县| 洛隆县| 宜兰市| 南开区| 江川县| 惠东县| 石棉县| 文昌市| 郧西县| 象山县| 富锦市| 鄂温| 炉霍县| 曲阜市| 乌什县| 海丰县| 鸡西市| 扎囊县| 同江市|