一:securuty默认情况
1.默认的配置
在引用security依赖以后,会有一个配置
security.basic.enabled=true
2.启动
用户名:user
密码:在控制台上查看
3.作用
在demo中的所有服务都没有被保护,是不安全的。
所以,需要有认证与授权
刚才的属于security默认的实现方式。
二:基于浏览器的安全的基本认知
1.新建一个包
并覆盖原有的安全配置
1 package com.cao.security.browser; 2 3 import org.springframework.context.annotation.Configuration; 4 import org.springframework.security.config.annotation.web.builders.HttpSecurity; 5 import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter; 6 /** 7 * 覆盖掉security原有的配置 8 * @author dell 9 * 10 */ 11 @Configuration 12 public class BrowserSecurityConfig extends WebSecurityConfigurerAdapter{ 13 @Override 14 protected void configure(HttpSecurity http) throws Exception { 15 //表单登陆的一个安全认证环境 16 http.formLogin() 17 .and() 18 .authorizeRequests() //请求授权 19 .anyRequest() //任何请求 20 .authenticated(); //都需要认证 21 22 } 23 }
2.效果
进入登录页
登录之后:
又会返回到刚刚访问的页面
3.httpbasic的身份认证
1 package com.cao.security.browser; 2 3 import org.springframework.context.annotation.Configuration; 4 import org.springframework.security.config.annotation.web.builders.HttpSecurity; 5 import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter; 6 /** 7 * 覆盖掉security原有的配置 8 * @author dell 9 * 10 */ 11 @Configuration 12 public class BrowserSecurityConfig extends WebSecurityConfigurerAdapter{ 13 @Override 14 protected void configure(HttpSecurity http) throws Exception { 15 //表单登陆的一个安全认证环境 16 // http.formLogin() 17 http.httpBasic() 18 .and() 19 .authorizeRequests() //请求授权 20 .anyRequest() //任何请求 21 .authenticated(); //都需要认证 22 23 } 24 }
4.效果
三:原理
1.原理图
2.原理说明
前面都是可以配置的过滤器。
如果没有带登录信息,就会一个一个朝后做验证。
一直到最后一个,如果前面都通过了,但是没有登录,将会抛出异常,到ExceptionTranslationFilter,做一个重定向到登录页。
然后,用户登录,就会到相应的过滤器,又会到最后一个FilterSecurityInterceptor,
最终进入Restful API
3.进行断点观察
FilterSecurityInterceptor
ExceptionTranslationFilter:捕获异常
UsernamePasswordAuthenticationFilter
UserController:进入服务