Spring Security-概述和安全认证

在Java Web中一般使用Servlet过滤器(Filter)对请求进行拦截,然后在过滤器中通过自己的验证逻辑来决定是否放行请求.同样的,Spring Security也是基于这个原理,在进入到DispatcherServlet之前就可以对Spring MVC的请求进行拦截,然后通过一定的验证,从而决定是否放行请求访问系统.

为了对请求进行拦截,Spring Security提供了过滤器DelegatingFilterProxy给予开发者配置.在传统的Web工程中,可以使用Spring Boot全注解的方式下,只需要加入@EnableWebSecurity就可以驱动Spring Security了.

而在Spring Boot中,只需要配置如上依赖所示,就可以自动启动Spring Security.为了后续的学习,这里稍微讨论了一下Spring Security的原理.一旦启用了Spring Security,Spring IOC容器就会为你创建一个名称为SpringSecurityFilterChain的Spring Bean.

他的类型是FilterChainProxy,事实上他也实现了Filter接口,只是他是一个特殊的拦截器.在Spring Security操作的过程中他会提供Servlet过滤器DelegatingFilterProxy,这个过滤器会通过Spring Web IOC容器去获取Spring Security所自动创建的FilterChainProxy对象,这个对象上存在一个过滤器列表(List),列表上存在用户验证的拦截器,跨站点请求伪造等拦截器,这样他就可以提供多种拦截功能.

于是焦点就又落到了FilterChainProxy对象上,通过它还可以注册Filter,也就是允许自定义的FIlter来实现对应的拦截器逻辑,以满足不同的需要.当然Spring Security也实现了大部分常用的安全功能,并提供了相应的机制来简化开发者的工作,所以大部分情况下并不需要自定义开发,使用他提供的机制就可以.本章主要内容是学习用Spring Security提供的机制构建安全网站.

虽然在上面的论述中有点生涩,但是实际上传统的Spring项目中,Spring Security的启用只需要一个注解.例如,在Web工程中可以使用@EnableWebSecurity来驱动SpringSecurity的启动,如果属于非Web工程,可以使用@EnableGlobalAuthentication,而事实上@EnableWebSecurity上已经标注了@EnableGlobalAuthentication并且依据自己的需要加入许多Web的特性,而在Spring Boot中,只需要加入上面的依赖,直接启动Spring Boot的应用也会启动Spring Security,这样就可以看到如下随机打印生成的日志(请注意,必须保证你的日志级别为INFO或者其以下才能看到)

Using generated security password: 21b6ffe2-8199-4d49-b3ac-a5d8756f5c97

注意:必须有Web依赖
加粗的密码是随机生成的,也就是每次启动密码都会不一样,然后我们不妨进行一次请求URL,很快你就会看到如图的登录页面.

Spring Security-概述和安全认证_第1张图片
点击登录之后
Spring Security-概述和安全认证_第2张图片
登录成功,跳转失败,但是暴露了一下的问题:

  • 每次启动都会造成密码的不同,造成客户每次都需要输入不同的密码,不太方便.
  • 用户只能使用"user",无法多样性,无法构建不同用户的不同权限
  • 不能自定义验证的方法,毕竟有些企业拥有自己的验证方法和策略
  • 登录页面不能自定义,界面不美观
  • 不能自定义那些请求需要安全认证,那些请求不需要安全认证
    关于这些问题,本章的后续几节都会慢慢解决.不过Spring Boot的自动配置机制,还是允许开发者很快的修改用户名和密码.例如,我们在application.yml文件中加入如下代码
#自定义用户名和密码
spring:
  security:
    user:
      name: myuser
      password: 123456

有了安全配置的属性,即使没有加入@EnableWebSecurity, Spring Boot也会根据配置的项自动启动安全机制.只是这里使用用户名"myuser"和密码"123456"就可以登录系统了,这样就可以自定义用户名和密码了,不需要在随机生成密码.除了这些配置之外,Spring Boot还支持一下清单的配置项
Spring Security-概述和安全认证_第3张图片
以上就是Spring Boot关于Spring Security可以配置的选项.在实际的工作中,大部分选项无需进行配置,只需要配置少量的内容即可.更多时候,在实际的开发中,我们会选择自定义用户,角色,权限等内容即可.更多时候,实际开发中,我们会选择自定义用户,角色和权限等内容,所以简单配置的方案就不再深入讨论了.为了实现自定义的功能,还需要进一步的学习Spring Security的机制.

你可能感兴趣的:(Spring Security-概述和安全认证)