1.jwt,spring security,oauth2.0,shiro区别
jwt:是一个鉴权生成加密token的一个名称
Spring security:权限框架,基于Spring的企业应用系统提供声明式的安全访问控制解决方案的安全框架;可以在Spring应用上下文中配置的Bean,充分利用了Spring IoC,DI。
Shiro:权限框架,可在C/S下运行。 shiro是一套权限管理框架,包括认证、授权等,在使用时直接写相应的接口(小而简单的Shiro就足够)
Shiro 默认是使用Session认证。
oauth2.0 :一种权限实现标准,是一种安全的授权框架,提供了一套详细的授权机制。用户或应用可以通过公开的或私有的设置,授权第三方应用访问特定资源。(如果不介意API的使用依赖于外部的第三方认证提供者,你可以简单地把认证工作留给认证服务商去做。)
2.HttpSecurity常用方法
方法 | 说明 |
anyRequest | 匹配所有请求路径 |
access | SpringEl表达式结果为true时可以访问 |
anonymous | 匿名可以访问 |
denyAll | 用户不能访问 |
fullyAuthenticated | 用户完全认证可以访问(非remember-me下自动登录) |
hasAnyAuthority | 如果有参数,参数表示权限,则其中任何一个权限可以访问 |
hasAnyRole | 如果有参数,参数表示角色,则其中任何一个角色可以访问 |
hasAuthority | 如果有参数,参数表示权限,则其权限可以访问 |
hasIpAddress | 如果有参数,参数表示IP地址,如果用户IP和参数匹配,则可以访问 |
hasRole | 如果有参数,参数表示角色,则其角色可以访问 |
permitAll | 用户可以任意访问 |
rememberMe | 允许通过remember-me登录的用户访问 |
authenticated | 用户登录后可访问 |
cors | 配置跨域资源共享( CORS ) 在 SpringSecurity 中关闭 CSRF 因为前端向后台发送 post 请求时,必须验证 csrf,否则会报错 403 Forbidden。 |
csrf | 添加 CSRF 支持,使用WebSecurityConfigurerAdapter时,默认启用 |
rememberMe | 允许配置“记住我”的验证 |
authorizeRequests | 允许基于使用HttpServletRequest限制访问 |
requestCache | 允许配置请求缓存 |
exceptionHandling | 允许配置错误处理 |
| |
logout | 添加退出登录支持。当使用WebSecurityConfigurerAdapter时,这将自动应用。默认情况是,访问URL”/ logout”,使HTTP Session无效来清除用户,清除已配置的任何#rememberMe()身份验证,清除SecurityContextHolder,然后重定向到”/login?success” |
formLogin | 指定支持基于表单的身份验证。如果未指定FormLoginConfigurer#loginPage(String),则将生成默认登录页面 |
oauth2Login | 根据外部OAuth 2.0或OpenID Connect 1.0提供程序配置身份验证 |
requiresChannel | 配置通道安全。为了使该配置有用,必须提供至少一个到所需信道的映射 |
httpBasic | 配置 Http Basic 验证 |
addFilterAt | 在指定的Filter类的位置添加过滤器 |
openidLogin | 用于基于 OpenId 的验证 |
headers | 将安全标头添加到响应 |
sessionManagement | 允许配置会话管理 |
portMapper | 允许配置一个PortMapper(HttpSecurity#(getSharedObject(class))),其他提供SecurityConfigurer的对象使用 PortMapper 从 HTTP 重定向到 HTTPS 或者从 HTTPS 重定向到 HTTP。默认情况下,Spring Security使用一个PortMapperImpl映射 HTTP 端口8080到 HTTPS 端口8443,HTTP 端口80到 HTTPS 端口443 |
jee | 配置基于容器的预认证。 在这种情况下,认证由Servlet容器管理 |
x509 | 配置基于x509的认证 |
securityContext | 在HttpServletRequests之间的SecurityContextHolder上设置SecurityContext的管理。 当使用WebSecurityConfigurerAdapter时,这将自动应用 |
servletApi | 将HttpServletRequest方法与在其上找到的值集成到SecurityContext中。 当使用WebSecurityConfigurerAdapter时,这将自动应用 |
@Override
public void configure(HttpSecurity http) throws Exception {
//忽略hello post接口(post请求不忽略会报错)
http.csrf().ignoringAntMatchers("/hellopost");
http.authorizeRequests()
.antMatchers("/hello", "/hellopost").permitAll()
.anyRequest().authenticated()
.antMatchers("/hello2").hasRole("administrator")
.and().formLogin().and().httpBasic();
}
//配置密码:方式1
@Override
protected void configure(AuthenticationManagerBuilder auth) throws Exception {
BCryptPasswordEncoder passwordEncoder = new BCryptPasswordEncoder();
String password = passwordEncoder.encode("111111");
auth.inMemoryAuthentication().withUser("user").password(password).roles("administrator");
}
3.requestMatchers()方法与authorizeRequests()区别
requestMatchers()配置的是哪些url进行安全控制,authorizeRequests()配置的是如何进行控制
例如: requestMatchers().anyRequest()=http.authorizeRequests().anyRequest().access(“permitAll”)=http.authorizeRequests().anyRequest().permitAll();
http.authorizeRequests().anyRequest().authenticated() = http.authorizeRequests().antMatchers("/").authenticated() ;
4.ResourceServerConfigurerAdapter与WebSecurityConfigurerAdapter区别
1.ResourceServerConfigurerAdapter是用于spring-security-oauth2, 配置哪些url要进行oauth2认证。
2.WebSecurityConfigurerAdapter是用于当前这个项目本身的访问控制,它属于spring-security-config。
3.ResourceServerConfigurerAdapter与WebSecurityConfigurerAdapter都有一个相同的方法,配置url的访问安全控制策略:如果在这个方法中配置了相同的url访问控制,会发现ResourceServerConfigurerAdapter配置控制策略生效,而WebSecurityConfigurerAdapter配置的策略不起作用。是因为ResourceServerConfigurerAdapter的order值小,优先级高。所以ResourceServerConfigurerAdapter起作用。
4. WebSecurityConfigurerAdapter在springboot 2.7之后就开始过时了,需要使用SecurityFilterChain进行配置。