spring security:第一个程序解析

上一篇在一个项目里配置了spring security,这里大致说一些这些配置的作用。

pom.xml 文件解析

    <!-- spring security --><!-- spring 安全--><dependency><groupId>org.springframework.security</groupId><artifactId>spring-security-web</artifactId><version>4.0.4.RELEASE</version></dependency><dependency><groupId>org.springframework.security</groupId><artifactId>spring-security-config</artifactId><version>4.0.4.RELEASE</version></dependency>

这里配置了两个模块,web模块不用说,config模块的作用是:支持使用命名空间(NameSpace)方式配置spring security。

spring security有两种配置方式,一种是Namespace,也就是我们现在使用的。在sring-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.xsd"> 

这里有个security命名空间,就是由config模块提供支持的。

除此之外,spring security有下面几个模块:

模块用途
Core核心基础模块,任何使用spring security 的项目都需要使用这个模块
Remoting如果你使用Spring Remoting的话,就需要引入这个模块,否则不用
Web包含很多过滤器,提供web 用户认证服务和基于URL的访问控制
Config支持spring security命名空间(namespace)配置,如果你使用的是命名空间的配置方式,那就需要引入这个模块
LDAP支持LDAP认证服务
ACL支持ACL认证服务
CAS支持CAS认证服务
OpenID支持OpenID 认证服务

对于各服务的描述,可查看原文:spring security modules

web.xml 文件解析

 <!-- spring security 配置 --><filter><filter-name>springSecurityFilterChain</filter-name><filter-class>org.springframework.web.filter.DelegatingFilterProxy</filter-class></filter><filter-mapping><filter-name>springSecurityFilterChain</filter-name><url-pattern>/*</url-pattern></filter-mapping><context-param><param-name>contextConfigLocation</param-name><param-value>/WEB-INF/spring-security.xml, /WEB-INF/applicationContext.xml</param-value></context-param>

上面的代码1)配置了一个代理Servlet过滤器 2)指出了spring security的配置文件位置。

spring借助一系列filter来提供各种安全性功能,上面配置的springSecurityFilterChain这个过滤器就相当去一个入口,它拦截下请求后,抛给spring security定义的各种过滤器去处理。

至于springSecurityFilterChain将请求抛给哪些过滤器,这个不用我们担心,我们只要在下面的spring-security.xml文件中使用<http>标签定义安全规则,spring security会自动调用相应的过滤器。

这个filter的名字是spring security内部定义的,不能修改。

spring-security.xml

<?xml version="1.0" encoding="UTF-8"?>
<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.xsd"> <http><intercept-url pattern="/user/**" access="hasRole('USER')" /><intercept-url pattern="/admin/**" access="hasRole('ADMIN')" /><form-login /><logout /></http><authentication-manager><authentication-provider><user-service><user name="jimi" password="jimispassword" authorities="ROLE_USER, ROLE_ADMIN" /><user name="bob" password="bobspassword" authorities="ROLE_USER" /></user-service></authentication-provider></authentication-manager></beans:beans>

在这个文件里,我们使用了security作为默认命名空间,这样就不用再写security 前缀了。

文件中只有两个标签,<http>标签和<authentication-manager>标签。

1)<http>标签

<http>标签定义http安全规则,<intercept-url pattern="/user/**" access="hasRole('USER')" /> 规定拦截所有/user/请求,并规定只有USER角色的认证用户才可以访问。

access="hasRole('USER')"这里使用的是SPEL表达式,spring security扩展的表达式如下:

表达式用法
hasRole([role])检查用户是否属于某个角色,是的话返回true
hasAnyRole([role1,role2])检查用户是否属于一系列角色中的任意一个,是的话返回true
hasAuthority([authority])检查用户是否有指定权限,是的话返回true
hasAnyAuthority([authority1,authority2])检查用户是否有一系列权限中的任意一个,是的话返回true
principal用户的主要信息对象,包含用户的用户名,ip等等信息
authentication用户认证对象的认证信息
permitAll相当于true
denyAll相当false
isAnonymous()如果当前用户为匿名用户,则返回true
isRememberMe()如果当前用户通过remember me登录,则返回true
isAuthenticated()如果当前用户不是匿名用户,则返回true
isFullyAuthenticated()如果当前用户不是匿名用户也不是通过remember me 登录,则返回true
hasPermission(Object target, Object permission)检查当前用户是否有访问目标路径的权限,例如:hasPermission(domainObject, 'read')
hasPermission(Object targetId, String targetType, Object permission)同上,例如:hasPermission(1, ‘com.example.domain.Message’, ‘read’)

参看:spring security built in

2)<authentication-manager>标签

那USER这个角色是在哪里定义的呢?<authentication-manager>标签就是用管理认证用户的,在这个标签内部,使用<user name="jimi" password="jimispassword" authorities="ROLE_USER, ROLE_ADMIN" />标签,定义用户名为jimi的用户是一个USER角色和一个ADMIN角色,ROLE_是spring security默认的角色前缀。

<authentication-manager>标签既是用户认证的管理者,可以管理基于内存、基于数据库、基于LDAP、OpenID等等认证方式,这里使用的就是最简单的基于内存的认证方式。


参考文档:
spring security 4.0.4 reference

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/430127.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

python发钉钉消息_Python调用钉钉机器人推送消息

1.创建钉钉机器人群机器人是钉钉群的高级扩展功能&#xff0c;群机器人可以将第三方服务的信息聚合到群聊中&#xff0c;实现自动化的信息同步&#xff1b;进入一个钉钉群&#xff0c;点击右上角的“群设置”进入群设置页面&#xff1b;选择群机器人点击进入&#xff0c;在机器…

spring security:基于MongoDB的认证

spring security对基于数据库的认证支持仅限于JDBC&#xff0c;而很多项目并非使用JDBC&#xff0c;比如Nosql数据库很多使用的是 Mongo Java Driver,这样就无法用默认的<jdbc-user-service>进行支持认证。 如果项目不是使用JDBC&#xff0c;没么解决办法就是&#xff1…

pandas 提取某几列_【科学计算工具二】初识Pandas

和Numpy最大的不同&#xff0c;Pandas的数据有对应的index。一、Series数组Series 是带有标签的一维数组&#xff0c;可以保存任何数据类型&#xff08;整数&#xff0c;字符串&#xff0c;浮点数&#xff0c;Python对象等&#xff09;&#xff0c;轴标签统称为索引创建Series数…

maven+springmvc下载excle文件——ie8可用

mavenspringmvc下载excle文件——ie8可用转载于:https://www.cnblogs.com/zhujiabin/p/5866535.html

spring security:自定义认证成功处理器

使用spring认证登录&#xff0c;登录之后&#xff0c;一般还需要进行其他处理&#xff0c;例如&#xff1a;保存登录时间、登录ip到数据库&#xff0c;缓存用户信息到redis数据库等等&#xff0c;这些操作可以通过自定义一个登录成功处理器来处理。 自定义认证成功处理器 只需…

开发物体识别桌、_科研人员开发突破性的技术,允许盲人识别形状和物体

一项令人难以置信的新技术正在让失明人士有能力识别形状和物体&#xff0c;而这些形状和物体都是在他们的大脑上“画出来”的。一篇描述该技术的研究论文刚刚发表在《细胞》杂志上&#xff0c;正如ScienceNews报道的那样&#xff0c;这可能是向盲人提供一种视觉上与周围世界互动…

【第一周】PSP

日期C类别C内容S开始时间E结束时间I间隔(单位:分钟)T净时间(单位:分钟)9月2日编程词频统计7:359:35101109月3日读书构建之法8:009:00555 编程词频统计13:0014:000609月4日读书构建之法8:009:00060 编程四则运算13:0015:0010110总时间&#xff1a;395分钟&#xff0c;约等于6.58…

spring webflow getting start

概述 很多时候&#xff0c;我们写的流程都嵌在一大堆代码中&#xff0c;没有办法直观的管理。而spring webflow可以将流程抽出来&#xff0c;放到一个单独的xml文件中&#xff0c;这样流程就不会埋没在代码里了。 今天要做一个很简单的流程&#xff1a; 商品发布流程 Created…

pythonvim编辑教程_Pycharm学习教程(6) Pycharm作为Vim编辑器使用

Pycharm作为Vim编辑器使用&#xff0c;具体内容如下1、主题如果你是Vim的粉丝&#xff0c;并且不打算使用其他类型的编辑器&#xff0c;那么这篇教程将会比较适合你。这里将会详细介绍如何在Pycharm IdeaVim插件的帮助下下载、安装、使用Vim。至于有关Python编程以及Vim的用法&…

什么是cname a记录

https://support.dnsimple.com/articles/cname-record/ CNAME就是别名记录&#xff0c;就是负责跳转&#xff0c;比如你给某个地址设置了一个cname,那当访问那个cname的时候&#xff0c;就会跳转到那个某个地址 a记录就是一个ip地址所对应的地址。可以理解为a记录就是一个连接器…

Spring上传时报Invalid CSRF Token错误解决方案

概述 使用spring security之后&#xff0c;默认上传文件会报这个错&#xff0c;解决方案有下面两个&#xff1a; 解决方案一&#xff1a; 将 MultipartFilter 放在 springSecurityFilterChain 前面 修改web.xml文件&#xff1a; <!-- 文件上传过滤器&#xff0c;过滤上传…

windows 修改nginx端口号_分享Nginx搭建图片服务器简单实现

第一步&#xff1a;安装vsftpd提供ftp服务https://www.cnblogs.com/lyq159/p/12070791.html第二步&#xff1a;安装Nginx提供http服务1.安装准备&#xff1a;安装Nginx环境a) gcc      安装nginx需要先将官网下载的源码进行编译&#xff0c;编译依赖gcc环境&#xff0c;如…

C#学习笔记-数据的传递(公共变量)以及Dictionary

看的代码越多&#xff0c;写的代码越多&#xff0c;就越是享受这些字符&#xff0c;终于渐渐懂得了那种传闻中的成就感&#xff0c;特别是自己从看不懂然后一步一步学&#xff0c;一个代码一个代码地敲&#xff0c;最后哪怕只是完成了一个小功能&#xff0c;也都是特别自豪的&a…

spring webflow : 上传单个文件实例

准备 如果你项目中使用了spring security的话&#xff0c;参考上一篇文章&#xff0c;使用上篇的第二种方法&#xff0c;并去掉MultipartFilter&#xff08;如果有配置的话&#xff09;&#xff0c;否则得不到文件流程中的变量&#xff08;如用var标签定义的变量&#xff09;&…

pythonopencv图像形态_Python+OpenCV图像处理之其他形态学操作

顶帽(Top Hat)&#xff1a;原图像与开操作之间的差值图像&#xff0c;突出原图像中比周围亮的区域黑帽(Black Hat)&#xff1a;闭操作图像与原图像的差值图像, 突出原图像中比周围暗的区域形态学梯度(Gradient)&#xff1a;基础梯度&#xff1a;基础梯度是用膨胀后的图像减去腐…

Spring webflow:上传多个文件

上篇讲了上传单个文件&#xff0c;在上篇的基础上稍作修改就可以上传多个文件了。 实现 首先&#xff0c;实体类要修改&#xff0c;使用List来存储多个文件&#xff1a; Component public class GoodsEntity implements Serializable{private static final long serialVersi…

csv格式清洗与转换python_实例详解Python中 CSV格式清洗与转换

Python中 CSV格式清洗与转换的实例代码题目&#xff1a;CSV格式清洗与转换描述附件是一个CSV格式文件&#xff0c;提取数据进行如下格式转换&#xff1a;‪‬‪‬‪‬‪‬‪‬‮‬‪‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‫‬‪‬‪‬‪‬‪‬‪…

斐波那契数列通项公式

1.对于斐波那契数列来说&#xff0c;存在通项公式&#xff0c;f[n] 2、Hdu练习题1568&#xff1b; 大意求斐波那契数列中的某一项&#xff0c;n很大&#xff0c;只能在O(1)时间求出&#xff0c;并且只要前四位 当n很大时最后一项几乎为零转载于:https://www.cnblogs.com/dlut-l…

Spring MVC 生成文件类型响应

图片控制器代码如下&#xff1a; Controller RequestMapping("/") public class WebController {RequestMapping(methodRequestMethod.GET,path"/img/{imgNo}")public void getImg(HttpServletResponse response,int index) throws IOException{ //读取图…

服务器驱动精灵_驱动精灵真的可以帮你安装驱动吗?别再无脑装驱动了

之前和大家讲过一期安装官方纯净系统的方法&#xff0c;戳我查看然后很多人就说重装之后显卡驱动掉了打游戏卡的跟PPT一样。于是很多人在重装系统或是进行了重大硬件更新后&#xff0c;一般会采用第三方驱动管理软件来进行硬件的更新&#xff0c;实际上这是一种自杀式行为&…