文档章节

spring-security上手笔记

v1-alpha
 v1-alpha
发布于 2015/12/23 07:58
字数 1408
阅读 45
收藏 0
点赞 0
评论 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
码字总数 72986
作品 0
厦门
程序员
SpringBoot集成Spring Security(1)——入门程序

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

yuanlaijike
05/09
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 + Spring Data JPA 项目整合开发记录(持续更新)

刚换了公司,项目架构师提出新的系统架构时还是愣了一下,搭建难度较低,很容易上手,但是对Spring Data JPA的了解不够深入,所以还是有些吃力,在框架搭建初期有许多东西并没有很好的集成。...

华山猛男
07/14
0
0
springmvc+mybatis学习笔记(汇总)

springmvc+mybatis学习笔记(汇总) 标签 : springmvc mybaits [TOC] 笔记分为两大部分:mybatis和springmvc mybatis springmvc 笔记内容主要是mybatis和springmvc的一些基本概念和使用方法,...

brianway
2016/03/30
1K
2
SpringMVC+Spring Data JPA+Shiro+EasyUI简单权限管理系统

概述 一直想做一个管理系统,希望它简洁,能做一个demo使用。以后在研究学习的时候,可以在此基础上增加代码。我觉得权限管理系统很值得做,因为涉及关系数据库模式的设计,能学到很多东西。...

huoyoung
2016/06/17
99
0
Spring实战读书笔记(1)

Spring的根本使命是? 简化Java开发 为了降低Java开发的复杂性,Spring采取了哪4种关键策略? 1、基于POJO的轻量级和最小侵入性编程 2、通过依赖注入和面向接口实现松耦合 3、基于切面和惯例...

祥林会跟你远走高飞
2014/12/30
0
0
Spring Security 学习总结(1)

最近在看Spring Security, 把学习的过程记录一下。 spring security 版本:3.2.7.RELEASE + Java Configuration. Spring Security 是什么? Spring Security 是一个框架,提供比较全面的安全服...

平江夜弹
2015/06/01
0
0
struts+spring+hibernate 整合spring security 2.X

好吧!在这个夜深人静的时候,既然没有睡意,那就刚好整理一个我的博文,osc挺好的,以后技术博文就在这里整理了!前几天因为项目需求spring security 机制,所以就自己研究了一下,到官方下...

Beyond-Bit
2012/07/01
0
4
创建Spring Boot项目的几种方式总结

一、我们可以使用Spring Initializr来创建SpringBoot项目。 Spring Initializr从本质上来说就是一个Web应用程序,它能为你生成Spring Boot项目结构。虽然不能生成应用程序代码,但它能为你提...

陈先生丶
07/11
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

JAVA 三种WebService 规范

JAVA 中共有三种WebService 规范,分别是JAX-WS(JAX-RPC)、JAXM&SAAJ、JAX-RS。 1. Jaxws(掌握) JAX-WS 的全称为 Java API for XML-Based Webservices ,早期的基于SOAP 的JAVA 的Web 服务...

onedotdot
21分钟前
0
0
将博客搬至CSDN

将博客搬至CSDN

xpbob
22分钟前
0
0
TensorFlow 拟合异或 one-hot方式

增加隐含层数目 之前是按照计算出的数值按照0.5分为0和1,现在是算出向量,用维度较大的作为结果 import tensorflow as tfimport numpy as np# 网络结构:2维输入 --> 2维隐藏层 --> ...

阿豪boy
25分钟前
0
0
Aidl进程间通信详细介绍

目录介绍 1.问题答疑 2.Aidl相关属性介绍 2.1 AIDL所支持的数据类型 2.2 服务端和客户端 2.3 AIDL的基本概念 3.实际开发中案例操作 3.1 aidl通信业务需求 3.2 操作步骤伪代码 3.3 服务端操作...

潇湘剑雨
40分钟前
0
0
python爬虫日志(3)下载图片

import urlliburl='https://xxx.jpg'#图片地址res=urllib.request.urlopen(url)#此函数用于对url的访问data=res.read() #字节流with open(r'D:\1.jpg',"wb") as code: c...

茫羽行
57分钟前
0
0
vue中$emit的用法

1、父组件可以使用 props 把数据传给子组件。 2、子组件可以使用 $emit 触发父组件的自定义事件。 vm.$emit( event, arg ) //触发当前实例上的事件 vm.$on( event, fn );//监听event事件后运...

JamesView
今天
0
0
bash审计系统搭建

step1:使用saltstack工具bash部署>>>>>> # salt -N clienta state.sls audit step2:安装elasticsearch>>>>>> 注意: 1.不能以root用户进行启动,需要创建用户,并对解压的elasticsearch目录赋......

硅谷课堂
今天
0
0
Linux sar性能分析

Linux使用sar进行性能分析 sar简介 sar命令常用格式 sar常用性能数据分析 整体CPU使用统计-u 各个CPU使用统计-P 内存使用情况统计-r 整体IO情况-b 各个IO设备情况-d 网络统计-n sar日志保存-...

易野
今天
0
0
用 Python 实现打飞机,让子弹飞吧!

所用技术和软件 python 2.7 pygame 1.9.3 pyCharm 准备工作 安装好 pygame 在第一次使用 pygame 的时候,pyCharm 会自动 install pygame。 下载好使用的素材。 技术实现 初始化 pygame 首先要...

猫咪编程
今天
0
0
MySQL的行锁和表锁

简单总结一下行锁和表锁。 行锁 每次操作锁住一行数据。开销大,加锁慢;会出现死锁;锁定粒度最小,发生锁冲突的概率最低,并发度也最高。 表锁 每次操作锁住整张表。开销小,加锁快;不会出...

to_ln
今天
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部