struts2如何使用攔截器進行使用者許可權控制
大多數網站會設定使用者許可權,如過濾非法使用者,使用者不登入時不能進行訪問,或者設定訪問的許可權,如部分內容僅對VIP開放等等,這些許可權的控制都可以用struts2中的攔截器來實現。下面通過一個簡單的Demo來模擬這種使用者許可權控制的實現流程,設定三種不同身份的使用者,commen為普通使用者,VIP為會員使用者,還有一種admin為管理員。
先看一下Demo的整體結構:
首先搭建struts2框架的開發環境(前面部落格中有介紹),環境搭建完之後又再看一看如何配置struts.xml:
其中,<global-results></global-results>是全域性的result,有很多時候一個<result>可供很多<action>使用,這時可以使用<global-results>標籤來定義全域性的<result>。執行順序:當一個Action返回的String沒有相應的<result>與之對應,Struts2就會查詢全域性的<result>,所以本次模擬測試中不符合條件被攔截的請求都會轉到error.jsp。<?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> <!--全域性結果處理 --> <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>
Action類,不做處理,全部放行,讓攔截器處理:
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名開頭的,就放行,否則攔截。package org.interceptor; import javax.servlet.http.HttpSession; import org.apache.struts2.ServletActionContext; import com.opensymphony.xwork2.ActionInvocation; import com.opensymphony.xwork2.interceptor.AbstractInterceptor; public class InterceptorTest extends AbstractInterceptor{ private static final long serialVersionUID = 2422100326160658352L; @Override public String intercept(ActionInvocation invocation) throws Exception { // TODO Auto-generated method stub //獲取了使用者所要訪問的路徑,即在struts.xml中設定的action的name String url = invocation.getProxy().getActionName(); HttpSession session = ServletActionContext.getRequest().getSession(); //獲取使用者輸入的使用者名稱 String username = (String) session.getAttribute("username"); System.out.println(username); if(username.startsWith(url)){ return invocation.invoke(); }else{ return "error"; } } }
登入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%>">
<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>
<h4>你的許可權不足,請先升級許可權...</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%>">
<title>index</title>
</head>
<body>
<a href="admin.action">admin</a><br/>
<a href="vip.action">vip</a><br/>
<a href="commen.action">commen</a>
</body>
</html>
其餘admin.jsp等介面沒有內容,只是為了區分實現跳轉頁面不同。
執行結果:
使用commen角色登入:
點選VIP以及admin跳轉連結時:
當點選commen連結時成功跳轉,這樣就實現了使用者許可權的控制。
相關推薦
struts2如何使用攔截器進行使用者許可權控制
大多數網站會設定使用者許可權,如過濾非法使用者,使用者不登入時不能進行訪問,或者設定訪問的許可權,如部分內容僅對VIP開放等等,這些許可權的控制都可以用struts2中的攔截器來實現。下面通過一個簡單的Demo來模擬這種使用者許可權控制的實現流程,設定三種不同身份的使用者,
用struts的攔截器實現使用者許可權控制
步驟1、匯入struts2的庫。 步驟2、編寫Interceptor類。 package com.voicesoft.Interceptor; import com.opensymphony.xwork2.Action; import com.opensymphon
【Struts2進階】Struts2攔截器實現基於Url的許可權管理
Struts2的攔截器只能攔截Action,攔截器是AOP的一種實現方式,可以使我們的系統架構更鬆散(耦合度低),可以插拔,容易互換,程式碼不改變的情況下很容易滿足客戶需求。 專案的許可權管理模組就使
Struts2 攔截器控制jsp頁面跳轉
源自一個題目: 請編寫一個攔截器,該攔截器可以獲得使用者輸入的使用者名稱這個資料,業務邏輯為逐個判斷使用者名稱中是否包含“你”,“我”,“他”三個資料,如果包含則直接返回輸入頁面,如果不包含則執行至PersonAction。(除程式碼外,要給出攔截器和Action的配置檔案
struts2 攔截器
struts2 攔截器攔截器,作用是在執行方法執行,進行過濾攔截。struts2 攔截器的幾種方式聲明攔截器,然後在Action中引用聲明的攔截器默認攔截器,在當前package下有且只能有一個默認攔截器作用:在當前package下所有的action都會經過默認攔截器攔截,當action中引入攔截器時,默認攔
j2ee之struts2攔截器()
xtend 導入 ati cat imp color row 針對 所有 struts2的基本配置以及jar包的導入就不說了只寫關鍵部分: <struts> <package name="userPackage" extends="struts-
Struts2攔截器
apach style tro cells 引入 span type can getc 一、內容提要 1.攔截器的概念及應用 2.STRUTS2自帶的攔截器 3.自定義攔截器 4.自定義攔截器的應用 二、攔截器的概念及應用 攔截器(Interceptor)是Struts
深入分析JavaWeb Item47 -- Struts2攔截器與文件上傳下載
com custom public 面向切面 lang down pri 多功能 art 一、struts2中的攔截器(框架功能核心) 1、過濾器VS攔截器 過濾器VS攔截器功能是一回事。過濾器是Servlet規範中的技術,能夠對請求和響應進行過濾。
Struts2攔截器和過濾器的區別?
tex ext struts 依賴 上下 生命周期 action 上下文 區別 ①過濾器依賴於Servlet容器,而攔截器不依賴於Servlet容器。 ②Struts2 攔截器只能對Action請求起作用,而過濾器則可以對幾乎所 有請求起作用。 ③攔截器可以訪問 Actio
Struts2攔截器 解決登錄問題
pan on() string ldr 一個 rect ive 登錄問題 request 一、了解Struts2 攔截器【Interceptor】 攔截器的工作原理如圖 攔截器是由每一個action請求(request)都包裝在一系列的攔截器的內部,通過redire
Struts2攔截器說明
調用 array intercept src pan pre left on() 主函數 有關於Struts2的攔截器的原理 在此共設置了兩個攔截器,firstInterception、SecondInterception 1 package struts2_intec
Mybatis攔截器之資料許可權過濾與分頁整合
解決方案之改SQL 原sql SELECT a.id AS "id", a.NAME AS "name", a.sex_cd AS "sexCd", a.org_id AS "orgId", a.STATUS AS "status", a.create_org_id AS "createOrgId"
struts2攔截器和檔案上傳下載
一、攔截器(Interceptor) 攔截器是動態攔截Action呼叫的物件,攔截器將Action共用的行為獨立出來,在Action執行前後執行。這也就是我們所說的AOP,它是分散關注的程式設計方法,它將通用需求功能從不相關類之中分離出來;同時,能夠共享一個行為,一旦行為發生變化,不必修改很
第19講 struts2攔截器-登陸驗證
1在HeadFirstStruts2chapter03中,新建com.cruise.model包,新建User類,屬性userName,password,package com.cruise.model;public class User { &
分享知識-快樂自己:Struts2 攔截器 與 過濾器
攔截器的使用以及配置: package com.gdbd.interceptor; import com.gdbd.pojo.UserInfo; import com.opensymphony.xwork2.ActionInvocation; import com.opensymphony.xwor
struts2攔截器與檔案上傳、下載
1、攔截器 定義一個action。. TestAction.java package com.zking.study.five; /** * 用於測試的action,與普通action沒啥區別 */ public class TestAction{ public Str
Struts2攔截器和檔案上傳
攔截器 首先需要建立一個攔截器OneInterceptor可以實現implements Interceptor介面 也可以繼承extends AbstractInterceptor類注意這裡用的是xwork2包下面的 package
基於mybatis攔截器實現資料許可權
資料許可權是很多系統常見的功能,實現的方式也是很多的,最近在做專案的時候,自己基於mybatis攔截器做了一個數據許可權的功能。 **功能設計 a) 需要做資料許可權功能的表加上一個許可權id欄位。 許可權id可以不僅僅是組織,還可以是其他自定義的欄位,用來做資料許可權,
Struts2攔截器再認識
攔截器(Interceptor)是 Struts 2 的核心組成部分。 Struts2 很多功能都是構建在攔截器基礎之上的,例如檔案的上傳和下載、國際化、資料型別轉換和資料校驗等等。 Struts2 攔截器在訪問某個 Action 方法之前或之後實施攔截 Struts2 攔截器是可插拔的, 攔截器是
struts2攔截器的執行原理以及攔截器和過濾器的區別
struts2攔截器的執行原理: 注意:struts2.1.3以後的版中下邊這張圖中的FilterDispatcher已經改為StrutsPrepareAndExecuteFilter 1.首先伺服器接受請求,首先載入web.xml,通過核心控制器Stru