Spring Security3 入门一

来源:互联网 发布:淘宝买电棍 编辑:程序博客网 时间:2024/04/30 23:53

         很长一段时间都想整理一份关于Spring Security(v   3.0.5)的文档,忙的时候想着有空了再说,有空了又想偷懒,一来二去,从接手项目的权限这块到现在都半年多了,这个想法却始终停留在脑子里,今天索性开个头,一点一点来,给自己足够的时间来整理这半年多来对Spring Security 的认识和理解。

        关于Spring Secutity 是什么,此处不做详细的介绍了,维基中有非常详细的介绍!项目之初,项目组做框架选型的时候,技术总监提到要用Spring Security,当时整个项目组的人都没太明白做权限还有必要用框架 ?! 事实上,确实是非常的有必要,或者更准确的说是必须要一些验证规则!主要也是因为之前的工作木有涉及到权限这块,脑子里对权限这块的概念比较模糊,琢磨着之前做过的业务系统从来也没听过用什么安全框架,关键的就是用几张与用户关联的表对用户信息及行为信息做存储,根据这些信息每次在业务方法中对其进行判断、约束就OK了...也是因为这次的项目经历明白了为什么?! 从事Web 开发的亲们,大家都知道,严格意义上讲,一个安全性比较强的b/s 架构的系统客户端发起的每次请求在服务器端都应该经过 身份认证、授权两个过程,只有这样,到达我们的控制器时才能确保当前的用户请求为合法的,不过是我们常常做的项目中将这两个过程淡化而已(甚至是遗忘),所以才会有了开头的疑惑!

     那么,每次客户端的请求在进入你的控制器时,都应该经过两个过程(身份认证、授权),也就意味着系统中的所操作都得有“身份认证、授权”这样额外的逻辑处理,这样的代码充斥着你的控制器的每个方法中,想想都蛮崩溃!当然了,一个结构以及安全性良好的应用系统是该如此! 那么既然控制器层的函数中在真正的业务规则处理之前都是“身份认证、授权”这样的代码,我们为什么不将其抽象出来,或者说剥离出来呢?聪明的你肯定想到继承了,一个父类控制器写身份认证、授权的判断逻辑,这样当然可以。可是未免显得有些不够灵活,对于我们现在这个需求而言...有木有想到Aop 呢 ? 我们完全可以把“身份认证、授权”这部分逻辑当作系统中一个与具体业务无关的点(就像事物、日志),也就是我们经常说的“横切面”,组织一部分代码针对其进行处理,  对用户的身份验证以及授权理想情况下本就不该侵入业务代码中的.我们可以自己写一些拦截器或者过滤器,但我们现在有更好的选择,去Apache 社区找找看,可以发现一个非常棒的开源权限框架,Spring Secyrity!你也许会想Spring Secyrity 与Aop 是什么关系呢?你可以理解为Spring Security 是Aop 思想的一种实现(此处假定你对Aop 有概念,对Aop 不熟悉的童鞋,建议先维基),就像spring一样也是一种Aop思想的实现,其实看了security 的源码就会发现 security框架的实现中到处充斥着设计思想以及最佳实践!

     整个Spring  Security 框架是一堆的拦截器组成的,客户端的任意请求在到达我们的控制器之前,security 已经将所有我们想到没想到的工作替我们做了。如 信道判断(具体基于http 、https 、udp 等某个协议,当你的控制器中规定某个方法只允许某种协议请求到时,security 的信道判断就会对其进行限制,是不是感觉很强大 ?!)、是否恶意攻击判断、同一用户的单点登录判断、登录登出判断、Session 过期判断、对用户进行授权以及权限判断等等.....security 帮我们做了这一系列复杂的处理工作,我们可以有更多的时间在业务方面,这样以来,我们的业务代码也会变得很“干净”,有木有 !?


      今天就到这,明天开始对Spring Secyrity的框架应用进行详细介绍。

原创粉丝点击