Spring MVC定制用戶登錄注銷實現示例

這篇文章描述了如何實現對Spring MVC Web應用程序的自定義用戶訪問(登錄注銷)。 作為前提,建議讀者閱讀這篇文章 ,其中介紹了一些Spring Security概念。

該代碼示例可從Spring-MVC-Login-Logout目錄中的Github獲得。 它從帶有注釋示例的Spring MVC派生而來。

定制身份驗證提供者

為了實現我們自己的接受用戶登錄請求的方式,我們需要實現身份驗證提供程序。 如果用戶的ID與密碼相同,以下內容可讓用戶進入:

public class MyAuthenticationProvider implements AuthenticationProvider {private static final List<GrantedAuthority> AUTHORITIES= new ArrayList<GrantedAuthority>();static {AUTHORITIES.add(new SimpleGrantedAuthority('ROLE_USER'));AUTHORITIES.add(new SimpleGrantedAuthority('ROLE_ANONYMOUS'));}@Overridepublic Authentication authenticate(Authentication auth)throws AuthenticationException {if (auth.getName().equals(auth.getCredentials())) {return new UsernamePasswordAuthenticationToken(auth.getName(),auth.getCredentials(), AUTHORITIES);}throw new BadCredentialsException('Bad Credentials');}@Overridepublic boolean supports(Class<?> authentication) {if ( authentication == null ) return false;return Authentication.class.isAssignableFrom(authentication);}}


Security.xml

我們需要創建一個security.xml文件:

<beans:beans xmlns='http://www.springframework.org/schema/security'xmlns:beans='http://www.springframework.org/schema/beans'xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance'xsi:schemaLocation='http://www.springframework.org/schema/beanshttp://www.springframework.org/schema/beans/spring-beans-3.0.xsdhttp://www.springframework.org/schema/securityhttp://www.springframework.org/schema/security/spring-security-3.1.xsd'><http><intercept-url pattern='/*' access='ROLE_ANONYMOUS'/><form-logindefault-target-url='/'always-use-default-target='true' /><anonymous /><logout /></http><authentication-manager alias='authenticationManager'><authentication-provider ref='myAuthenticationProvider' /></authentication-manager><beans:bean id='myAuthenticationProvider'class='com.jverstry.LoginLogout.Authentication.MyAuthenticationProvider' /></beans:beans>

以上內容可確保所有用戶都具有匿名角色來訪問任何頁面。 登錄后,它們將重定向到主頁。 如果他們沒有登錄,他們將被自動視為匿名用戶。 還聲明了注銷功能。 與其重新實現輪子,不如使用Spring本身提供的項目。

主頁

我們實現了一個主頁,顯示當前登錄用戶的名稱以及登錄和注銷鏈接:

<%@ taglib prefix='c' uri='http://java.sun.com/jsp/jstl/core' %>
<!doctype html>
<html lang='en'>
<head><meta charset='utf-8'><title>Welcome To MVC Customized Login Logout!!!</title>
</head><body><h1>Spring MVC Customized Login Logout !!!</h1>Who is currently logged in? <c:out value='${CurrPrincipal}' /> !<br /><a href='<c:url value='/spring_security_login'/>'>Login</a>?<a href='<c:url value='/j_spring_security_logout'/>'>Logout</a></body>
</html>


控制者

我們需要向視圖提供當前登錄的用戶名:

@Controller
public class MyController {@RequestMapping(value = '/')public String home(Model model) {model.addAttribute('CurrPrincipal',SecurityContextHolder.getContext().getAuthentication().getName());return 'index';}}


運行示例

編譯后,可以通過瀏覽以下示例開始示例:http:// localhost:9292 / spring-mvc-login-logout /。 它將顯示以下內容:

使用相同的ID和密碼登錄:

該應用程序返回主窗口并顯示:

更多春天相關的帖子在這里 。

祝您編程愉快,別忘了分享!

參考: Spring MVC定制的用戶登錄注銷實現示例,來自我們的JCG合作伙伴 Jerome Versrynge,在技術說明博客中。


翻譯自: https://www.javacodegeeks.com/2012/10/spring-mvc-customized-user-login-logout.html

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

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

相關文章

HTML5與CSS3權威指南筆記案例1

第1章 <!DOCTYPE html> <meta charset "UTF-8"> <title> Search </title> <form> <p><label>Search&#xff1a;<input name"search" autofocus></label> </p> </form> <!DOCTYPE&…

java循環的概念_Java數據結構之循環隊列簡單定義與用法示例

本文實例講述了Java數據結構之循環隊列簡單定義與用法。分享給大家供大家參考&#xff0c;具體如下&#xff1a;一、概述&#xff1a;1、原理&#xff1a;與普通隊列的區別在于循環隊列添加數據時&#xff0c;如果其有效數據end maxSize - 1(最大空間)的話&#xff0c;end指針…

Unrecognized option: -jrockit

weblogic報錯&#xff1a; starting weblogic with Java version: Unrecognized option: -jrockit Error: Could not create the Java Virtual Machine. Error: A fatal exception has occurred. Program will exit. Starting WLS with line: /data/jdk1.8.0_45/bin/java -jroc…

51nod 1105 第K大的數

基準時間限制&#xff1a;1 秒 空間限制&#xff1a;131072 KB 分值: 40 難度&#xff1a;4級算法題 數組A和數組B&#xff0c;里面都有n個整數。數組C共有n^2個整數&#xff0c;分別是A[0] * B[0],A[0] * B[1] ......A[1] * B[0],A[1] * B[1]......A[n - 1] * B[n - 1]&#x…

在Tomcat上設置和使用Apache Solr

前一陣子花了一點時間來玩Solr&#xff0c;但立即被我們可以在一些更大的數據集上獲得的性能所震撼。 這是我的一些初始設置和配置學習信息&#xff0c;也許可以幫助某人啟動它并更快地運行。 首先在Windows上進行設置。 下載并解壓縮Apache Tomcat和Solr&#xff0c;然后將其復…

sass變量

sass變量用法 1、sass變量必須以$符開頭&#xff0c;后面緊跟著變量名 2、變量值和變量名之間就需要使用冒號(:)分隔開&#xff08;就像CSS屬性設置一樣&#xff09; 3、如果值后面加上!default則表示默認值 默認變量 sass的默認變量&#xff1a;僅需要在值后面加上!defaul…

西安4年java多少時間_西安學習java一般要多久

線程小n行的任務/任務執的數單個量為間隔執行池大所需時間時間&#xff0c;西安學習的配置&#xff0c;西安學習行定行池務的務執c配在執注置任方法時任上標&#xff0c;下解行調問題務的方度任有以異步決辦采用法&#xff1a;上述式執。比如、般要多本名(套接套接5套t地地節點…

js 遞歸函數的使用及常用函數

1.遞歸函數的使用&#xff1a; 公園里有一堆桃子&#xff0c;猴子每天吃掉一半&#xff0c;挑出一個壞的扔掉&#xff0c;第6天的時候發現還剩1個桃子&#xff0c;問原來有多少個桃子 var peache;function peaches(n) { if (n 6) { peache 1; } else { …

redis分布式鎖-SETNX實現

轉自&#xff1a;https://my.oschina.net/u/1995545/blog/366381 Redis有一系列的命令&#xff0c;特點是以NX結尾&#xff0c;NX是Not eXists的縮寫&#xff0c;如SETNX命令就應該理解為&#xff1a;SET if Not eXists。這系列的命令非常有用&#xff0c;這里講使用SETNX來實現…

sql java驅動程序_Microsoft SQL Server JDBC 驅動程序支持矩陣

本頁包含 Microsoft SQL Server JDBC 驅動程序的支持矩陣和支持生命周期策略。Microsoft JDBC 驅動程序支持生命周期矩陣和策略Microsoft 支持生命周期 (MSL) 策略提供了與 Microsoft 產品的支持生命周期有關的可預測透明信息。 自驅動程序發布之日起&#xff0c;JDBC 驅動程序…

使用直接內存時可以更快

總覽 使用直接內存不能保證提高性能。 考慮到它增加了復雜性&#xff0c;除非有充分的理由使用它&#xff0c;否則應避免使用它。 塞爾吉奧奧利維拉&#xff08;Sergio Oliveira Jr&#xff09;的這篇出色文章表明&#xff0c;這不僅僅是使用直接內存來提高性能的問題&#x…

POJ 3977 折半枚舉

鏈接&#xff1a; http://poj.org/problem?id3977 題意&#xff1a; 給你n個數&#xff0c;n最大35&#xff0c;讓你從中選幾個數&#xff0c;不能選0個&#xff0c;使它們和的絕對值最小 如果有一樣的&#xff0c;取個數最小的 題解&#xff1a; np難題&#xff0c;但是因為…

java踩坑記

1.String 相等 稍微有點經驗的程序員都會用equals比較而不是用 &#xff0c;但用equals就真的安全了嗎&#xff0c;看下面的代碼 user.getName().equals("xiaoming"); 有經驗的老司機很快就能看到問題&#xff0c;如果user.getName()為null,就會拋出空指針異常&#…

java taken_java-是否有正確的方法在slf4j中傳遞參數?

第三變種是最好的。實際上&#xff0c;第一種情況是通過StringBuilder進行的字符串連接。第二和第三種情況相同。他們需要將整數值裝箱到Integer(或其他Object)&#xff0c;然后創建一個數組來打包它們。在我的機器上進行的簡單測試表明&#xff0c;如果不執行日志記錄&#xf…

html常用小知識

請求重定向&#xff1a;加載頁面之后&#xff0c;除了用js做重定向之外&#xff0c;我們還可以直接用<meta>標簽做重定向。 1 <meta http-equiv"refresh" content"5;urlhttp://www.baidu.com" /> 5秒后跳轉 超鏈接&#xff1a;在當前的iframe…

MyEclipse快捷鍵大全【轉】

-------------------------------------MyEclipse 快捷鍵1(CTRL)-------------------------------------Ctrl1 快速修復CtrlD: 刪除當前行 CtrlQ 定位到最后編輯的地方 CtrlL 定位在某行 CtrlO 快速顯示 OutLine CtrlT 快速顯示當前類的繼承結構 CtrlW 關閉當前Editer Ct…

根據您的命令-命令設計模式

命令設計模式是一種廣為人知的設計模式&#xff0c;它屬于行為設計模式&#xff08;“四人幫”的一部分&#xff09;。 顧名思義&#xff0c;它與應用程序中的動作和事件有關。 問題陳述&#xff1a; 假設有一個網頁將在其中包含多個菜單的情況。 編寫此代碼的一種方法是使條件…

用js和jQuery做輪播圖

Javascript或jQuery做輪播圖 css樣式 <style> a{ text-decoration:none; } .naver{ width: 100%; position:relative; }.images{position:relative;width: 100%;height: 400px; } .images img{position:absolute;left: 0;top: 0;width: 100%;height: 400px;opacity: 0;fi…

w3school前端教程合集

有關前端開發的w3c教程合集。 http://caibaojian.com/w3school/ 地圖ajax教程Canvas教程CSS教程CSS3教程CSS3選擇器CSS參考手冊DHTML教程HTML教程HTML5教程HTML5音頻教程HTML DOM教程JavaScript教程jQuery教程jQuery Ajax教程jQuery事件jQuery操作jQuery選擇器jQuery遍歷json教…

【開發調試】谷歌瀏覽器中調試移動網頁和測試網速下頁面效果

、 今天有幸給大家分享一下谷歌瀏覽器針對移動網頁測試的技巧&#xff0c;主要是最近做個微信公共號網站。所以就要對頁面測試拉。移動網頁我們最長測得就是各種手機大小的頁面效果和出現網絡問題的效果展示。 今天就簡單分享下在谷歌瀏覽器測試頁面的適配和網速限制展示。…