最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

struts2如何使用攔截器進行用戶權(quán)限控制實例

 更新時間:2017年05月09日 10:24:48   作者:阿木俠  
本篇文章主要介紹了struts2如何使用攔截器進行用戶權(quán)限控制實例,非常具有實用價值,需要的朋友可以參考下

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

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

先看一下Demo的整體結(jié)構(gòu):

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

<?xml version="1.0" encoding="UTF-8" ?> 
<!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> 
  <!--全局結(jié)果處理 --> 
  <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>。執(zhí)行順序:當一個Action返回的String沒有相應的<result>與之對應,Struts2就會查找全局的<result>,所以本次模擬測試中不符合條件被攔截的請求都會轉(zhuǎn)到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"; 
 } 
} 

 只是 模擬攔截器的實現(xiàn)思路,沒有持久層的數(shù)據(jù),這里的方法是使用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> 

攔截后跳轉(zhuǎn)頁:

<body> 
 <h4>你的權(quán)限不足,請先升級權(quán)限...</h4> 
 </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等界面沒有內(nèi)容,只是為了區(qū)分實現(xiàn)跳轉(zhuǎn)頁面不同。

運行結(jié)果:

使用commen角色登錄:

點擊VIP以及admin跳轉(zhuǎn)鏈接時:

以上就是本文的全部內(nèi)容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • Spring Cloud Data Flow初體驗以Local模式運行

    Spring Cloud Data Flow初體驗以Local模式運行

    這篇文章主要介紹了Spring Cloud Data Flow初體驗以Local模式運行,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-08-08
  • 詳解SpringMVC注解版前臺向后臺傳值的兩種方式

    詳解SpringMVC注解版前臺向后臺傳值的兩種方式

    本篇文章主要介紹了詳解SpringMVC注解版前臺向后臺傳值的兩種方式,具有一定的參考價值,有興趣的可以了解一下。
    2017-04-04
  • springboot實現(xiàn)小程序支付的項目實踐

    springboot實現(xiàn)小程序支付的項目實踐

    本文主要介紹了springboot實現(xiàn)小程序支付的項目實踐,?可以通過調(diào)用微信支付?API?實現(xiàn)支付功能,具有一定的參考價值,感興趣的可以了解一下
    2023-09-09
  • java讀取配置文件自定義字段(yml、properties)

    java讀取配置文件自定義字段(yml、properties)

    本文主要介紹了java讀取配置文件自定義字段(yml、properties),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2023-07-07
  • 解讀Spring MVC的工作流程

    解讀Spring MVC的工作流程

    SpringMVC的工作流程是基于模型-視圖-控制器(MVC)設計模式的一個典型實現(xiàn),主要包括用戶發(fā)送請求到前端控制器(DispatcherServlet)、前端控制器轉(zhuǎn)發(fā)請求給處理器映射器(HandlerMapping)
    2025-01-01
  • 完美解決java讀取大文件內(nèi)存溢出的問題

    完美解決java讀取大文件內(nèi)存溢出的問題

    下面小編就為大家?guī)硪黄昝澜鉀Qjava讀取大文件內(nèi)存溢出的問題。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-08-08
  • Spring Boot實戰(zhàn)之逐行釋義Hello World程序

    Spring Boot實戰(zhàn)之逐行釋義Hello World程序

    spring boot 是基于Spring的一個框架,Spring boot幫我們集成很多常用的功能,使得整個配置更加簡單。這篇文章主要介紹了Spring Boot實戰(zhàn)之逐行釋義Hello World,需要的朋友可以參考下
    2017-12-12
  • java中Statement 與 PreparedStatement接口之間的關(guān)系和區(qū)別

    java中Statement 與 PreparedStatement接口之間的關(guān)系和區(qū)別

    這篇文章主要介紹了java中Statement 與 PreparedStatement接口之間的關(guān)系和區(qū)別,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2020-07-07
  • Java超詳細講解類的繼承

    Java超詳細講解類的繼承

    繼承就是可以直接使用前輩的屬性和方法。自然界如果沒有繼承,那一切都是處于混沌狀態(tài)。多態(tài)是同一個行為具有多個不同表現(xiàn)形式或形態(tài)的能力。多態(tài)就是同一個接口,使用不同的實例而執(zhí)行不同操作
    2022-04-04
  • java解析Excel文件的方法實例詳解

    java解析Excel文件的方法實例詳解

    在日常工作中,我們常常會進行文件讀寫操作,除去我們最常用的純文本文件讀寫,更多時候我們需要對Excel中的數(shù)據(jù)進行讀取操作,下面這篇文章主要給大家介紹了關(guān)于java解析Excel文件的方法,需要的朋友可以參考下
    2022-06-06

最新評論

宁都县| 东乡县| 乳源| 益阳市| 深水埗区| 东乡族自治县| 陵水| 泰和县| 临颍县| 田林县| 嘉鱼县| 永清县| 花垣县| 都匀市| 叶城县| 天气| 五河县| 金秀| 会宁县| 博白县| 通山县| 揭西县| 娄底市| 偃师市| 霍邱县| 桂林市| 湘乡市| 屯留县| 手游| 樟树市| 定日县| 大兴区| 昔阳县| 顺平县| 靖西县| 定州市| 沾益县| 耒阳市| 玉门市| 阳信县| 成都市|