SpringSecurity

SpringSecurity

Spring Security 是 Spring 家族中的一个安全管理框架,提供了一整套web应用安全性完整
地解决方案,Web应用安全性主要是用户认证和授权,这两个也是SpringSecurity核心功能。
在springboot,springcloud出来之前,权限框架一直是shiro的天下,直到springboot出来后,security才得到广泛地应用。
最合适的推荐组合:
		SSM+shiro
		springboot+security

SpringSecurity的特点

优点:
	与spring无缝结合
	全面的权限控制
	专为web设计开发(旧版本不能脱离web环境,新版本可以)
缺点:
	重量级框架

shiro的特点

优点:
	轻量级框架,Apache旗下的
	通用性。
缺点:
	特定的需求需手动编写

基本原理

security本质是一个过滤器链,内含十几个过滤器。
SpringSecurity 的过滤器:
	1.WebAsyncManagerIntegrationFilter:将 Security 上下文与 Spring Web 中用于 处理异步请求映射的 WebAsyncManager 进行集成
	2.SecurityContextPersistenceFilter:在每次请求处理之前将该请求相关的安全上 下文信息加载到 SecurityContextHolder 中,然后在该次请求处理完成之后,将 SecurityContextHolder 中关于这次请求的信息存储到一个“仓储”中,然后将 SecurityContextHolder 中的信息清除,例如在 Session 中维护一个用户的安全信 息就是这个过滤器处理的
	3.HeaderWriterFilter:用于将头信息加入响应中
	4.CsrfFilter:用于处理跨站请求伪造
	5.LogoutFilter:用于处理退出登录
	6.UsernamePasswordAuthenticationFilter:用于处理基于表单的登录请求,从表单中 获取用户名和密码。默认情况下处理来自 /login 的请求。从表单中获取用户名和密码 时,默认使用的表单 name 值为 username 和 password,这两个值可以通过设置这个 过滤器的 usernameParameter 和 passwordParameter 两个参数的值进行修改
	7.DefaultLoginPageGeneratingFilter:如果没有配置登录页面,那系统初始化时就会 配置这个过滤器,并且用于在需要进行登录时生成一个登录表单页面
	8.BasicAuthenticationFilter:检测和处理 http basic 认证
	9.RequestCacheAwareFilter:用来处理请求的缓存
	10.SecurityContextHolderAwareRequestFilter:主要是包装请求对象 request
	11.)AnonymousAuthenticationFilter:检测 SecurityContextHolder 中是否存在 Authentication 对象,如果不存在为其提供一个匿名 Authentication
	12.SessionManagementFilter:管理 session 的过滤器 
	13.ExceptionTranslationFilter:处理 AccessDeniedException 和 AuthenticationException 异常
	14.FilterSecurityInterceptor:可以看做过滤器链的出口
	15.RememberMeAuthenticationFilter:当用户没有登录而直接访问资源时, 从 cookie 里找出用户的信息, 如果 Spring Security 能够识别出用户提供的 remember me cookie, 用户将不必填写用户名和密码, 而是直接登录进入系统,该过滤器默认不开启
security有两个重要的接口:
		UserDetailsService:当什么都没配置时,账号密码是由security自动生成的,实际项目是自定义从数据库查询的,所以我们需要实现此接口
		passwordEncoder:把密码按照特定的解析规则进行解析

使用方法

1.UserDetailsServices 接口			自定义逻辑控制认证逻辑
2.WebSecurityConfigurerAdapter类		适配器, 在配置的时候,需要我们自己写个配置类去继承他
3.基于角色或权限进行访问控制 
	hasAuthority 		具有指定的权限,则返回 true,否则返回false 
	hasAnyAuthority 	如果当前有任何提供的角色(给定的作为一个逗号分隔的字符串列表)的话,返回 true. 
	hasRole 		如果用户具备给定角色就允许访问,否则出现403
	hasAnyRole 	表示用户具备任何一个条件都可以访问
4.自动登录
	注入dataSource
	方法:PersistentTokenRepository 其中设置数据源DataSource和自动创建表
	流程:登录->token存入cookie加密,表中存一份,再次进入将两者对比,true就自动登录	   
	注:前端自动登录name必须为remember-me并在配置类中配置过期时间

CSRF(跨站请求伪造)

跨站请求伪造(英语:Cross-site request forgery),也被称为 one-click attack 或者 session riding,通常缩写为 CSRF 或者 XSRF, 是一种挟制用户在当前已 登录的 Web应用程序上执行非本意的操作的攻击方法。跟跨网站脚本(XSS)相比,XSS 利用的是用户对指定网站的信任,CSRF 利用的是网站对用户网页浏览器的信任。 
跨站请求攻击,简单地说,是攻击者通过一些技术手段欺骗用户的浏览器去访问一个
自己曾经认证过的网站并运行一些操作(如发邮件,发消息,甚至财产操作如转账和购买
商品)。由于浏览器曾经认证过,所以被访问的网站会认为是真正的用户操作而去运行。 这利用了 web中用户身份验证的一个漏洞:简单的身份验证只能保证请求发自某个用户的 浏览器,却不能保证请求本身是用户自愿发出的。 
从 Spring Security 4.0 开始,默认情况下会启用 CSRF保护,以防止 CSRF攻击应用 程序,Spring Security CSRF 会针对 PATCH,POST,PUT 和 DELETE 方法进行防护

注解使用

@EnableGlobalMethodSecurity(securedEnabled=true)	开启注解
@Secured 	判断是否具有角色,另外需要注意的是这里匹配的字符串需要添加前缀“ROLE_“
@PreAuthorize 	进入方法前的权限验证(需先开启注解@EnableGlobalMethodSecurity(prePostEnabled = true) )
@PostAuthorize	进入方法后的权限验证(需先开启注解@EnableGlobalMethodSecurity(prePostEnabled = true) )
@PostFilter 	权限验证之后对数据进行过滤 留下用户名的数据 
@PreFilter 	进入控制器之前对数据进行过滤 

SpringSecurity 微服务权限方案

1.编写核心配置类 
	是继承 WebSecurityConfigurerAdapter 并注解 @EnableWebSecurity 的配置。这个配置指明了用户名密码的处理方式、请求路径、登录 登出控制等和安全相关的配置
2.创建认证授权相关的工具类 
	PasswordEncoder			密码处理接口
	TokenManager			token 操作的工具(结合JWT)
	LogoutHandler			退出接口
	AuthenticationEntryPoint	未授权统一处理 接口
3.创建认证授权实体类 
	UserDetails	登录用户和权限接口
	User 		用户实体类
4.创建认证和授权的filter 
	 UsernamePasswordAuthenticationFilter	用户密码过滤器类
	 BasicAuthenticationFilter		授权过滤器类
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值