文档章节

spring-security上手笔记

v1-alpha
 v1-alpha
发布于 2015/12/23 07:58
字数 1408
阅读 47
收藏 0

不安全隐患

>缺少URL保护和统一的认证造成的权限扩散

>授权不合理甚至缺失;

>数据库认证信息不安全且很容易获取

>个人的识别信息和敏感数据很容易获取或没有加密

>不安全的传输层保护,没有使用SSL加密

 

1)认证: 识别系统中的某一个用户,并将其与一个可信任的(安全的)实体关联;

2)授权:保证授权过的用户能够给功能和数据进行恰当的访问;

3)数据库认证信息不安全很容易获取:

4)敏感信息:如信用卡号等等;

5)数据传输层保护:

 

安全是一个组件

 

一些术语

认证:鉴别我们应用中的用户是他们所声明的那个人。

principal:已认证安全实体,用来唯一标识一个认证过的实体。大多数情况下,一个principal只是简单地代表一个用户user

授权:涉及2个方面:a)已认证的安全实体与一个或多个权限的匹配关系;b)分配 权限检查 系统中要进行安全保护的资源。

 

扩展和配置

>如何扩展和配置spring security来满足需求。Spring Security有强大的基础配置功能以及内置的认证功能。

 

 

1)Spring Securityxml配置文件:描述所有需要用到的spring security组件,这些组件将会控制标准的web请求;SecurityNamespaceHandler 解析Spring Securityxml配置文件

2)web.xml里添加DelegatingFilterProxy,拦截servletRequest请求

整体流程

过滤链

Spring Security使用过滤器链的概念并实现了自己的抽象,提供了VirtualFilterChain,可以根据Spring Security XML配置文件中设置的URL模式动态地创建过滤器链。过滤链的名称:默认是DelegatingFilterProxy配置的filter-name,或者特别配置beanName

        Spring Security拥有总共大约25个过滤器。过滤链的配置通过<http>元素实现。其中自动配置auto-config的选项会自动添加10Spring Secutiry的过滤器:顺序如下:

o.s.s.web.context.SecurityContextPersistenceFilter

负责从SecurityContextRepository获取或存储SecurityContextSecurityContext代表用户安全和认证过的session

http://dead-knight.iteye.com/blog/1513086

 

使用memcache存储,可以分布式。

默认通过session获取,多个应用同一个域名被坑。

o.s.s.web.authentication.logout.LogoutFilter

退出

监控一个实际为退出功能的URL(默认为/j_spring_security_logout),并在匹配时完成用户的退出功能

 

o.s.sweb.authentication.UsernamePasswordAuthenticationFileter

使用<http><form-login>子元素配置

form登录认证

监控一个使用用户名和密码基于form认证的URL(默认为/j_spring_security_check),并在URL匹配时尝试认证用户

o.s.s.webauthentication.ui.DefaultLoginPageGeneratingFilter

监控一个基于formOpenId认证的URL(默认为/spring_security_login),并生成展示登陆formHTML

o.s.s.web.authentication.www.BasicAuthenticationFilter

HTTP基本认证

监控HTTP基础认证的头信息并进行处理

o.s.s.web.saverequest.RequestCacheAwareFilter

用户用户登录成功后,重新恢复因为登陆被打断的请求

o.s.s.web.servletapi.SecurityContextHolderAwareRequestFilter

用一个扩展了HttpServletRequestWrapper的子类o.s.s.web.servletapi.SecurityContextHolderAwareRequestWrapper包装HttpServletRequest。它为请求处理器提供了额外的上下文信息。

o.s.s.web.authentication.AnonumousAuthenticationFilter

如果用户到这一步还没经过认证,将会为这个请求关联一个认证的token,标识此用户是匿名的。

o.s.s.web.session.SessionManagementFilter

根据认证的安全实体信息跟踪session,保证所有关联一个安全实体的session都能被跟踪到。session固化

o.s.s.web.access.ExceptionTranslationFilter

解决在处理一个请求时产生的指定异常

o.s.s.web.access.intercept.FilterSecurityInterceptor

简化授权和访问控制决定,委托一个AccessDecisionManager完成授权的判断。

 

org.springframework.security.config.http.HttpSecurityBeanDefinitionParser

使用order排序

认证

有两个重要接口的实现是在认证链中被这些参与的类初始化的,它们用来封装一个认证过(或还没有认证过的)的用户的详细信息和权限:

1)o.s.s.core.Authentication存储用户的详细信息,包括唯一标识(如用户名)、凭证信息(如密码)以及本用户被授予的一个或多个权限(o.s.s.core.GrantedAuthority)。开发人员通常会使用Authentication对象来获取用户的详细信息,或者使用自定义的认证实现以便在Authentication对象中增加应用依赖的额外信息。

             

异常

授权

投票器(voter)是在授权过程中的一个重要角色,它的作用是评估以下的内容:

l 要访问受保护资源的请求所对应上下文(如URL请求的IP地址);

l 用户的凭证信息(如果存在的话);

l 要试图访问的受保护资源;

l 系统的配置以及要访问资源本身的配置参数。请求资源的“访问声明信息”。

实际上Spring Security允许通过security命名空间来配置AccessDecisionManager<http>元素的access-decision-manager-ref属性来指明一个实现了AccessDecisionManagerSpring Bean

登录-退出

登录

1)配置form-login login-page屏蔽掉DefaultLoginPageGeneratingFilter

2)去掉登录页的权限验证过滤:

 

退出

remember me

Remember me功能设置了一个cookie在用户的浏览器上,它包含一个Base64编码的字符串,包含以下内容:

l 用户的名字;

l 过期的日期/时间;

l 一个MD5的散列值包括过期日期/时间、用户名和密码;

l 应用的key值,是在<remember-me>元素的key属性中定义的。

 

这些内容将被组合成一个cookie的值存储在浏览器中以备后用。

 

RememberMeAuthenticationFilter在过滤器链中,位于SecurityContextHolderAwareRequestFilter之后,而在AnonymousProcessingFilter之前。

© 著作权归作者所有

共有 人打赏支持
v1-alpha

v1-alpha

粉丝 5
博文 62
码字总数 73104
作品 0
厦门
程序员
SpringBoot集成Spring Security(1)——入门程序

因为项目需要,第一次接触Spring Security,早就听闻Spring Security强大但上手困难,今天学习了一天,翻遍了全网资料,才仅仅出入门道,特整理这篇文章来让后来者少踩一点坑(本文附带实例程...

yuanlaijike
05/09
0
0
Spring Boot [集成-Spring Security]

导读 在上一篇文章中对Spring Boot 集成Shrio做了一个简单的介绍,这篇文章中主要围绕Spring Boot 集成 Spring Security展开,文章末尾附有学习资料。 快速上手: 1.引入pom依赖 2.实现一个简...

yangrd
08/27
0
0
进阶-使用Spring Security3.2搭建LDAP认证授权和Remember-me(1)

回顾 在之前的一篇博客中,Tomcat认证授权与简单的SSO 我在tomcat cluster上搭建了一个简单的网站,并试验了各种认证授权BA,FBA,以及tomcat自身build-in的SSO机制。但就像摘要里面写的内容...

xpbug
2014/02/20
0
0
让Spring Security 来保护你的Spring Boot项目吧

参考资料: 书籍:Spring实战(第4版) 第9章和第14章 Spring Security 参考手册 初识 Spring Security 程序猿DD的Spring Security学习笔记 Spring Security 简介 Spring Security是一个能够为...

潇潇漓燃
05/19
0
0
Spring Boot学习笔记

文件上传与下载 springboot 上传文件到服务器 Spring Boot2.0连载(33)-- Spring Boot文件上传下载 SpringBoot项目的The temporary upload location ***is not valid 问题 /tmp/tomcat.8483...

OSC_fly
07/26
0
0

没有更多内容

加载失败,请刷新页面

加载更多

js 操作cookie

var cookie = {// 设置cookie方法 set:function(key,val,time){ var date = new Date(); //获取当前时间 var expiresDays = time; //将date设置为n天以后的时间...

小丶二
1分钟前
0
0
限制root远程登录 su和sudo命令

9月21日任务 3.7 su命令 3.8 sudo命令 3.9 限制root远程登录 对于Linux而言,权限的重要性毋庸置疑!对于普通用户而言无法执行那些只有root用户才能有效的命令,导致工作无法有效进行; 系统...

robertt15
3分钟前
0
0
MQTT协议的初浅认识之通讯级别和持久会话

背景 这是我最近了解MQTT协议的最后一部分内容了,MQTT协议里面的QOS和Keep Alive是两个比较重要的内容。QOS的设置,直接影响了订阅客户端与中间件之间的消息交互行为。而Keep Alive直接影响...

亚林瓜子
5分钟前
0
0
calc

width: calc(100% - 30px); 特别注意:减号左右空格,均不能去掉。 width: calc(100% - 30px);

柴高八斗之父
13分钟前
0
0
Spring Cloud Gateway全局过滤器GlobalFilter:返回消息和重定向

Spring Cloud Gateway的全局过滤器GlobalFilter,顾名思义,声明后会对所有的请求生效,可以用来做权限控制,这里简单记录一下拦截到非法请求后如何返回自定义信息和将请求重定向到指定URL。...

夜雨寄北09
16分钟前
0
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部