spring-security上手笔记

不安全隐患

>缺少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请求

075335_nWSU_229733.png

075335_AzQR_229733.png

整体流程

过滤链

075335_cHdz_229733.png

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

075335_OOYy_229733.png

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

o.s.s.web.context.SecurityContextPersistenceFilter

075335_ucBp_229733.png

负责从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

075335_lq8O_229733.png

075335_TD4i_229733.png

075336_2Abv_229733.png

075336_3jEg_229733.png

075336_bw3l_229733.png

075336_xHRq_229733.png

使用order排序

075336_2Y7U_229733.png

认证

075336_JIy0_229733.png

075336_UwtE_229733.png

075337_rkqt_229733.png

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

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

075337_rXYQ_229733.png              075337_KUJM_229733.png

075337_gh99_229733.png

075337_bOfN_229733.png

075338_MQXZ_229733.png

异常

075338_0coP_229733.png

授权

075338_TjQa_229733.png

075338_2Prh_229733.png

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

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

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

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

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

075338_ddtS_229733.png

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

075338_A2KR_229733.png

075339_UXIk_229733.png

登录-退出

登录

075339_HlPG_229733.png

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

075339_PfVc_229733.png

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

075339_4ZDP_229733.png

 

退出

075339_ot60_229733.png

075339_5h8U_229733.png

075340_9bZ4_229733.png

075812_TMGF_229733.pngremember me

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

l 用户的名字;

l 过期的日期/时间;

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

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

 

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

 

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

075812_ado3_229733.png

075812_gEcb_229733.png

075813_viAR_229733.png

转载于:https://my.oschina.net/braveCS/blog/549387

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值