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.mzph.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;主要是最近做个微信公共号网站。所以就要对页面测试拉。移动网页我们最长测得就是各种手机大小的页面效果和出现网络问题的效果展示。 今天就简单分享下在谷歌浏览器测试页面的适配和网速限制展示。…