35.使用攔截器實現權限驗證

轉自:https://wenku.baidu.com/view/84fa86ae360cba1aa911da02.html

為了說明此問題,我們建立struts2auth項目,流程圖如下:

簡短說明:當我們訪問main.jsp頁面,并試圖通過此頁面中的鏈接地址:note.action來訪問到.../WEB-INF/note.jsp頁面時,由于訪問的note.action配置了攔截器,所以會被攔截,如果攔截器判斷登錄則可以訪問,否則會跳到登錄頁面。如果我們從登錄頁面直接到main.jsp頁面,再來訪問note.action時,同樣被攔截但是由于登錄過,所以可以訪問到此action對應的內容。由這里的分析可以看出關鍵點就登錄成功時給出標志提供給攔截器判斷是否成功登錄。
步驟一,搭建好相關的開發環境,并準備好登錄頁面login.jsp,代碼如下:
<form action="<%=request.getContextPath()%>/login.action" method="post">

????????????? 姓名:<input type="text" name="username"><br>

????????????? 密碼:<input type="password" name="password"><br>

????????????? <input type="submit" value="登錄">

</form>
步驟二,建立相應的Action:LoginAction。代碼如下:
package com.asm;

public class LoginAction extends ActionSupport {

?????? private String username;

?????? Map session;

?????? public String execute() throws Exception {

????????????? if(username.equals("admin")){

???????????????????? session = ActionContext.getContext().getSession();

???????????????????? session.put("loginSign", "loginSuccess");

???????????????????? return SUCCESS;

????????????? }else{

???????????????????? return LOGIN;

????????????? }

}
...省略username的get/set方法

}

說明:我們這里是設定了只有登錄用戶名為admin時,此Action才設置登錄標志。另這里獲取Session對象采取的是“與Servlet解耦合的非IOC方式”。
步驟三,編寫攔截器類,代碼如下:
package com.asm.interceptor;

public class AuthInterceptor extends AbstractInterceptor {

?????? public String intercept(ActionInvocation invocation) throws Exception {

????????????? Map session = invocation.getInvocationContext().getSession();

????????????? // session=ActionContext.getContext().getSession();

????????????? if (session.get("loginSign") == null) {

???????????????????? return "login";

????????????? } else {

???????????????????? String result = invocation.invoke();

???????????????????? return result;

????????????? }

?????? }

}

步驟四,配置此Action相關,主要配置內容如下:
<struts>

?????? <package name="tokenTest" extends="struts-default">

????????????? <interceptors>

???????????????????? <interceptor name="auth"

??????????????????????????? class="com.asm.interceptor.AuthInterceptor">

???????????????????? </interceptor>

???????????????????? <interceptor-stack name="authStack">

??????????????????????????? <interceptor-ref name="auth"></interceptor-ref>

??????????????????????????? <interceptor-ref name="defaultStack"></interceptor-ref>

???????????????????? </interceptor-stack>

????????????? </interceptors>

????????????? <action name="login" class="com.asm.LoginAction">

???????????????????? <result name="success">/main.jsp</result>

???????????????????? <result name="login">/login.jsp</result>

????????????? </action>

?

????????????? <action name="note">

???????????????????? <result>/WEB-INF/note.jsp</result>

???????????????????? <result name="login">/login.jsp</result>

???????????????????? <interceptor-ref name="authStack"></interceptor-ref>

????????????? </action>

?????? </package>

</struts>

說明:結合前面的一些代碼來看,當我們為note.action配置了前面寫所的AuthInterceptor攔截器時,如果我們要訪問note.action,攔截器會首先判斷是否登錄,如果登錄則繼續把請求傳遞下去,如果沒有登錄則會返回到登錄頁面。
步驟五、編寫相關的其它jsp頁面,然后發布測試。此實例應重點是進一步掌握攔截器的配置使用。作為“實現資源權限訪問”,此實例不具參考價值。

轉載于:https://www.cnblogs.com/sharpest/p/5587636.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/284399.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/284399.shtml
英文地址,請注明出處:http://en.pswp.cn/news/284399.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

如何保證緩存和數據庫的一致性?

1. 問題分析 2. Cache-Aside 2.1 讀緩存 2.2 寫緩存 2.3 延遲雙刪 2.4 如何確保原子性 3. Read-Through/Write-Through 3.1 Read-Through 3.2 Write-Through 4. Write Behind 很多小伙伴在面試的時候&#xff0c;應該都遇到過類似的問題&#xff0c;如何確保緩存和數據庫…

Pressed狀態和clickable,duplicateParentState的關系

做Android開發的人都用過Selector,可以方便的實現View在不同狀態下的背景。不過&#xff0c;相信大部分開發者遇到過和我一樣的問題&#xff0c;本文會從源碼角度&#xff0c;解釋這些問題。 首先&#xff0c;這里簡單描述一下&#xff0c;我遇到的問題&#xff1a; 界面上有個…

Hbase筆記4 java操作Hbase

暫無轉載于:https://www.cnblogs.com/mrxiaohe/p/6512481.html

【招聘(南京)】 慧咨環球南京研發中心 .NET和Blazor 前端

主要的亮點快速增長的、產品導向型的全球性科技公司設計和開發市場領先的軟件解決方案WLB — 工作生活相平衡澳洲排名前五的軟件公司混合辦公 — 3天在家辦公&#xff0c;2天在辦公室辦公在C#和.NET開發&#xff0c;企業級系統研發&#xff0c;軟件工程方面有長期的優秀實踐和技…

用Python+Django在Eclipse環境下開發web網站【轉】

一、創建一個項目如果這是你第一次使用Django&#xff0c;那么你必須進行一些初始設置。也就是通過自動生成代碼來建立一個Django項目--一個Django項目的設置集&#xff0c;包含了數據庫配置、Django詳細選項設置和應用 特性配置&#xff0c;具體操作步驟如下所示。 1.新建Djan…

[轉]數據結構KMP算法配圖詳解(超詳細)

KMP算法配圖詳解 前言 KMP算法是我們數據結構串中最難也是最重要的算法。難是因為KMP算法的代碼很優美簡潔干練&#xff0c;但里面包含著非常深的思維。真正理解代碼的人可以說對KMP算法的了解已經相當深入了。而且這個算法的不少東西的確不容易講懂&#xff0c;很多正規的書本…

BGP-MED-2

BGP-MED-2如圖&#xff1a;當AS100去往AS300的60、10的網絡時&#xff0c;60走R3&#xff0c;10走R1!使用MED屬性影響選路&#xff01; R2的配置 bgp 200peer 1.1.1.1 as-number 100 peer 1.1.1.1 ebgp-max-hop 255 peer 1.1.1.1 connect-interface LoopBack0peer 4.4.4.4 as-n…

WPF 實現 Gitee 氣泡菜單(一)

WPF 實現 Gitee 氣泡菜單&#xff08;一&#xff09;氣泡菜單&#xff08;一&#xff09;作者&#xff1a;WPFDevelopersOrg原文鏈接&#xff1a; https://github.com/WPFDevelopersOrg/WPFDevelopers框架使用大于等于.NET40&#xff1b;Visual Studio 2022;項目使用 MIT 開…

[轉]LVS負載均衡(LVS簡介、三種工作模式、十種調度算法)

一、LVS簡介 LVS&#xff08;Linux Virtual Server&#xff09;即Linux虛擬服務器&#xff0c;是由章文嵩博士主導的開源負載均衡項目&#xff0c;目前LVS已經被集成到Linux內核模塊中。該項目在Linux內核中實現了基于IP的數據請求負載均衡調度方案&#xff0c;其體系結構如圖1…

一張圖看懂微軟Power BI系列組件

一、Power BI簡介 Power BI是微軟最新的商業智能&#xff08;BI&#xff09;概念&#xff0c;它包含了一系列的組件和工具。話不多說&#xff0c;直接上圖吧&#xff1a; Power BI的核心理念就是讓我們用戶不需要強大的技術背景&#xff0c;只需要掌握Excel這樣簡單的工具就能快…

互聯網項目總結

2019獨角獸企業重金招聘Python工程師標準>>> 從去年年底開始專門被分配到互聯網小組做項目&#xff0c;一直想做個總結&#xff0c;但是苦于太貪玩。好吧&#xff0c;借著小組技術交流來一發。這里只對自己新學習的技術或者一些小技巧做簡要概述&#xff0c;不做深究…

【ArcGIS微課1000例】0036:分式標注案例教程

【拓展閱讀】:【ArcGIS Pro微課1000例】0015:ArcGIS Pro中屬性字段分式標注案例教程 文章目錄 1. 符號化2. 分式標注1. 符號化 右鍵數據圖層→符號系統,打開符號系統對話框,住符號系統選擇【唯一值】,字段1選擇NAME。 唯一值標注效果: 2. 分式標注 雙擊打開圖層屬性,切…

【轉】 ConstraintLayout 完全解析 快來優化你的布局吧

轉自&#xff1a; http://blog.csdn.net/lmj623565791/article/details/78011599 本文出自張鴻洋的博客 一、概述 ConstraintLayout出現有一段時間了&#xff0c;不過一直沒有特別去關注&#xff0c;也多多少少看了一些文字介紹&#xff0c;多數都是對使用可視化布局拖拽&#…

IoTDB 的C# 客戶端發布 0.13.0.7

IoTDB C# Client 0.13.0.7 已經發布&#xff0c; 此版本更新的內容為筆者為Apache-IoTDB-Client-CSharp實現了Ado.Net的兼容層&#xff0c;降低了對IoTDB的使用門檻。于此同時&#xff0c; IoTSharp也開始支持了IoTDB的數據入庫&#xff0c;隨著晚些時候IoTSharp 2.7 版本的發布…

[轉]Docker超詳細基礎教程,快速入門docker

一、docker概述 1.什么是docker Docker 是一個開源的應用容器引擎&#xff0c;基于 Go 語言 并遵從 Apache2.0 協議開源。 Docker 可以讓開發者打包他們的應用以及依賴包到一個輕量級、可移植的容器中&#xff0c;然后發布到任何流行的 Linux 機器上&#xff0c;也可以實現虛擬…

【Zookeeper】源碼分析之服務器(一)

一、前言 前面已經介紹了Zookeeper中Leader選舉的具體流程&#xff0c;接著來學習Zookeeper中的各種服務器。 二、總體框架圖 對于服務器&#xff0c;其框架圖如下圖所示 說明&#xff1a; ZooKeeperServer&#xff0c;為所有服務器的父類&#xff0c;其請求處理鏈為PrepReques…

linux下配置samba服務器(以CentOS6.7為例)

一、簡介&#xff08;百度百科&#xff09;Samba是在Linux和UNIX系統上實現SMB協議的一個免費軟件&#xff0c;由服務器及客戶端程序構成。SMB&#xff08;Server Messages Block&#xff0c;信息服務塊&#xff09;是一種在局域網上共享文件和打印機的一種通信協議&#xff0c…

【ArcGIS微課1000例】0037:上下標標注記案例教程

在利用ArcGIS進行制圖時&#xff0c;進行標注(Label) 或注記(Annolation) 是必不可少的。但是除了常規的標注和注記以外&#xff0c;還時常需要一些特殊的標注或注記&#xff0c;比如上標、下標等。 文章目錄一、上標標注方法二、下標標注方法一、上標標注方法 上下標代碼模板…

Redis——緩存擊穿、穿透、雪崩

1、緩存穿透&#xff1a; &#xff08;1&#xff09;問題描述&#xff1a;key對應的數據并不存在&#xff0c;每次請求訪問key時&#xff0c;緩存中查找不到&#xff0c;請求都會直接訪問到數據庫中去&#xff0c;請求量超出數據庫時&#xff0c;便會導致數據庫崩潰。如一個用…

數據庫性能系列之子查詢

前言說起數據庫&#xff0c;想必一些朋友會認為&#xff0c;數據庫不就是天天CRUD嗎&#xff1f;只要我掌握了這幾招&#xff0c;根本不在話下。是的&#xff0c;其實我也很贊同這個觀點&#xff0c;對于大多數應用程序來說&#xff0c;只掌握這些內容&#xff0c;是可以勝任日…