领取MOLI红包

  SpringSecurity是一个安全框架,主要用于授权和认证,在普通项目中,我们使用过滤器和拦截器也可以实现,但是使用SpringSecurity更加简单。 一、spring security 简介         spring security 的核心功能主要包括: 认证 (你是谁) 授权 (你能干什么) 攻击防护 (防止伪造身份)   其核心就是一组过滤器链,项目启动后将会自动配置。最核心的就是 Basic Authentication Filter 用来认证用户的身份。在spring security中一种过滤器处理一种认证方式。   比如,对于username password认证过滤器来说,会检查是否是一个登录请求;是否包含username 和 password (也就是该过滤器需要的一些认证信息),如果不满足则放行给下一个。   下一个按照自身职责判定是否是自身需要的信息,basic的特征就是在请求头中有 Authorization:Basic eHh4Onh4 的信息。   中间可能还有更多的认证过滤器。最后一环是 FilterSecurityInterceptor,这里会判定该请求是否能进行访问rest服务,判断的依据是 BrowserSecurityConfig 中的配置,如果被拒绝了就会抛出不同的异常(根据具体的原因)。   Exception Translation Filter 会捕获抛出的错误,然后根据不同的认证方式进行信息的返回提示。   注意:绿色的过滤器可以配置是否生效,其他的都不能控制。 二、整合SpringSecurity 1、在pom文件中导入依赖 2、新建配置类   该配置类的意思是:直接访问 /test 可以访问,但是若访问 /hello 则需要先登录。   WebSecurityConfig类使用了@EnableWebSecurity注解 ,以启用SpringSecurity的Web安全支持,并提供Spring MVC集成。它还扩展了WebSecurityConfigurerAdapter,并覆盖了一些方法来设置Web安全配置的一些细节。   configure(HttpSecurity)方法定义了哪些URL路径应该被保护,哪些不应该。具体来说,“/test”路径被配置为不需要任何身份验证,所有其他路径必须经过身份验证。   当用户成功登录时,它们将被重定向到先前请求的需要身份认证的页面。有一个由 loginPage()指定的自定义“/登录”页面,每个人都可以查看它。   对于configure(AuthenticationManagerBuilder) 方法,它将单个用户设置在内存中。该用户的用户名为“gwf”,密码为“123456”,角色为“vip1”。 3、下面我们看下其他详细拦截规则: 4、自定义页面   前面我们的登录页面都是使用的SpringSecurity默认的,我们可以在配置类中修改成我们自定义的登录页面 (1)自定义登录页面:resources/templates/login.html   SpringSecurity的name属性默认是username和password,这里我们采用自定义的方式,改成:user 与 pwd,/login是SpringSecurity默认的处理登录的Controller (2)修改SecurityConfig配置类   在configure(HttpSecurity http)方法中添加如下内容,(注意这里我们要禁止csrf,否则登录会被拦截): (3)编写Controller   此时,我们就可以使用自定义登录页面了。 三、参数详解 1、注解 @EnableWebSecurity   在 SpringBoot 应用中使用 Spring Security,用到了 @EnableWebSecurity 注解,官方说明为,该注解和 @Configuration 注解一起使用,注解 WebSecurityConfigurer 类型的类,或者利用@EnableWebSecurity 注解继承 WebSecurityConfigurerAdapter的类,这样就构成了 Spring Security 的配置。 2、抽象类 WebSecurityConfigurerAdapter   一般情况,会选择继承 WebSecurityConfigurerAdapter 类,其官方说明为:WebSecurityConfigurerAdapter 提供了一种便利的方式去创建 WebSecurityConfigurer的实例,只需要重写 WebSecurityConfigurerAdapter 的方法,即可配置拦截什么URL、设置什么权限等安全控制。 3、方法 configure(AuthenticationManagerBuilder auth) 和 configure(HttpSecurity http)      Demo 中重写了 WebSecurityConfigurerAdapter 的两个方法: 4、final 类 HttpSecurity   HttpSecurity 常用方法及说明: 5、类 AuthenticationManagerBuilder   意思是,AuthenticationManagerBuilder 用于创建一个 AuthenticationManager,让我能够轻松的实现内存验证、LADP验证、基于JDBC的验证、添加UserDetailsService、添加AuthenticationProvider。 四、校验流程图 五、源码解析   AbstractUserDetailsAuthenticationProvider通过名字,你有没有什么想法?抽象的用户详情验证提供者!!!那么我们看一下authenticate(Authentication authentication)方法!   retrieveUser方法   查看源码,他是一个抽象的方法;那接下来我们看一下它的实现类!DaoAuthenticationProvider



Powered by EPIC中文网 @2013-2022 RSS地图 HTML地图

Copyright Powered by365站群 © 2013-2024