spring security简单介绍

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/jnshu_it/article/details/84099064

这里是修真院后端小课堂,每篇分享文从

【背景介绍】【知识剖析】【常见问题】【解决方案】【编码实战】【扩展思考】【更多讨论】【参考文献】

八个方面深度解析后端知识/技能,本篇分享的是:

【spring security简单介绍】

大家好,我是IT修真院北京分院第34期的学员岳晓鹏,一枚正直纯洁善良的java程序员,今天给大家分享一下,修真院官网java任务八,深度思考中的知识点——spring security简单介绍

(1)背景介绍:

Spring security

Spring Security是一个基于Java / Java EE的框架,为企业应用程序提供身份验证,授权和其他安全功能。该项目于2003年底开始,作为'Acegi Security'(发音为Ah-see-gee) 被Ben Alex于2004年3月在Apache License下公开发布。随后,Acegi被纳入Spring组合作为Spring Security,一个官方的Spring子项目。新名称下的第一个公开发布是2008年4月的Spring Security 2.0.0,SpringSource提供了商业支持和培训。目前的最新版本为spring security4。

(2)知识剖析:

Spring security在安全方面所处的层次;

安全是一个不断演进的目标,追求一个全面的、系统级别的安全方案是非常重要的。站在安全领域的角度,我们鼓励分层的概念,每一层都只管理自己职责范围内的安全问题,每一层的安全机制越严格,我们的应用就越健壮、越安全。

1、在最底层,我们需要处理传输层安全和系统识别。

2、接着我们会使用防火墙,可能会联合VPN或者IP安全机制来保证只有被授权的系统才能进行连接。

3、在企业环境中,我们需要部署一个DMZ( demilitarized zone )服务来隔离对外提供访问的接口的服务器与内部数据库和应用服务器。

4、我们的操作系统也扮演了安全中的一环,例如使用不具有特定权限的用户运行进程,限制用户最大可以操作的文件数量等。操作系统通常也会配置自己的防火墙。

5、我们可能还会尝试使阻止DDOS( Distributed DenialofService)分布式拒绝服务和暴力破解攻击(brute force attacks )。一个入侵检测系统对于攻击的监控和响应是非常有用的,可以帮助我们实时的拒绝某些TPC/IP地址的访问。

6、从更高的层面即JVM的层面来说,我们可以通过配置最小化一个Java类可以具有的权限(译者注:通过JAVA_HOME/jre/lib/security/java.policy文件进行配置)

7、最后我们在应用层面添加一些领域特定的安全配置。

Spring Security可以让最后一点,即应用相关的安全( application security )设置变得更加容易。

权限认证的“套路”----验证和授权

应用级别的安全主要分为“验证( authentication) ”和“(授权) authorization ”两个部分。这也是Spring Security主要需要处理的两个部分。“ Authentication ”指的是建立规则( principal )的过程。规则可以是一个用户、设备、或者其他可以在我们的应用中执行某种操作的其他系统。" Authorization "指的是判断某个 principal 在我们的应用是否允许执行某个操作。在进行授权判断之前,要求其所要使用到的规则必须在验证过程中已经建立好了。

spirng支持的验证方式

HTTP BASIC authentication headers (an IETF RFC-based standard)认证头

HTTP Digest authentication headers (an IETF RFC-based standard)

HTTP X.509 client certificate exchange (an IETF RFC-based standard)

LDAP (a very common approach to cross-platform authentication needs, especially in large environments)

Form-based authentication (for simple user interface needs)

OpenID authentication

Authentication based on pre-established request headers (such as Computer Associates Siteminder)

。。。。

通用的权限模型----权限五张表;

用户,角色,用户角色关联表,角色,角色权限关联表;

任何权限的需求,都是为广义的用户分配角色,角色拥有广义的权限。

角色是最重要的中枢,隐藏做幕后黑手,从不出现在业务代码里,用行话说就是解除了用户和权限的直接耦合。

角色把用户抽象化了,几百个用户变成成几个角色,用户->角色->权限写成通用判断权限的方法:currUser.IsHave(xx权限)。核心就是一个sql联表查询语句,查询条件为用户id。

在Spring Security4的使用中,有4种方法:

一种是全部利用配置文件,将用户、权限、资源(url)硬编码在xml文件或java代码中;

二种是用户和权限用数据库存储,而资源(url)和权限的对应采用硬编码配置。

三种是细分角色和权限,并将用户、角色、权限和资源均采用数据库存储,并且自定义过滤器,代替原有的FilterSecurityInterceptor过滤器,并分别实现AccessDecisionManager、InvocationSecurityMetadataSourceService和UserDetailsService,并在配置文件中进行相应配置。

四是修改spring security的源代码,主要是修改InvocationSecurityMetadataSourceService和UserDetailsService两个类。 前者是将配置文件     或数据库中存储的资源(url)提取出来加工成为url和权限列表的Map供Security使用,后者提取用户名和权限组成一个完整的(UserDetails)User     对象,该对象可以提供用户的详细信息供AuthentationManager进行认证与授权使用。

(3)常见问题:

spring security怎么实现对方法的权限认证

(4)解决方案:

spring中用@PreAuthorize标注在方法上,利用spring的切面思想,在方法调用前先进行权限验证匹配,如果合适再进行方法的调用。

(5)编码实战:

简单的进行一个spring security的简单调用

(6)拓展思考:

(7)参考文献:

http://www.tianshouzhi.com/api/tutorials/spring_security_4/262 【1】。个人博客

https://blog.csdn.net/code__code/article/details/53885510【2】。CSDN博客

https://blog.csdn.net/chenyao1994/article/details/80736369【3】。CSDN博客

(8)更多讨论:

Q1:spring security的权限错误页面时怎么定义的?-------来自师弟讨论问题
A1:spring的配置文件类WebSecurityConfigurerAdapter中的configue方法,通过继承并重写方法,可以自定义错误页面,或者到错误处理的controller类进行自定义;具体的方法是使用HttpSecurity.failureForwardUrl("/error")指定错误页面,不指定默认为spring boot的error页面。

Q2:spring security的userDetailService的作用?-------来自师弟讨论问题

A2:spring security中的userDetailService类是一个接口,方法直有一个,loadUserByUsername,作用就是从指定的数据源加载用户信息到spring的authenticationManager中去,当用户输入用户名和密码以后,这个作为验证的依据。数据源可以是数据库,或者是硬编码的代码,而且spring security直有一个加载信息的途径,所有的加载数据,必须实现这个接口。

Q3:spring security和shiro怎么选择?
A3:除了不能脱离Spring,shiro的功能security都有。而且Spring Security对Oauth、OpenID也有支持,Shiro则需要自己手动实现。Spring Security的权限细粒度更高;但是spring security的学习成本高,配置起来较security复杂一些,spring security的扩展性比较好,如果后期迭代比较多,可以考虑选择security作为基础。

(9)鸣谢:

(10)结束语:

今天的分享就到这里啦,欢迎大家点赞、转发、留言、拍砖~

PPT链接 视频链接

更多内容,可以加入IT交流群565734203与大家一起讨论交流

这里是技能树·IT修真院:http://www.jsnhu.com,初学者转行到互联网的聚集地

猜你喜欢

转载自blog.csdn.net/jnshu_it/article/details/84099064