温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

为什么加了一个Spring Security依赖所有接口都无法访问

发布时间:2021-10-09 14:46:39 来源:亿速云 阅读:304 作者:iii 栏目:编程语言

本篇内容主要讲解“为什么加了一个Spring Security依赖所有接口都无法访问”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“为什么加了一个Spring Security依赖所有接口都无法访问”吧!

正文

  1. 当我们在项目中添加了 Spring Security 依赖后, 即使不做任何配置, 它也默认会帮我们拦截掉所有请求.

  2. 为了修改 Spring Security 的默认行为, 我们需要做一些配置, 也就是通过重写 WebSecurityConfigurerAdapterconfigure(HttpSecurity http) 方法.

那么问题来了, 为什么仅仅加了一个 Spring Security 依赖, 就可以拦截请求了?

答案自然跟 Springboot 的自动装配有关系.

SecurityAutoConfiguration 装配类

通过 @Import 注解, 可以找到 SpringBootWebSecurityConfiguration

@Configuration(proxyBeanMethods = false)
@ConditionalOnClass(DefaultAuthenticationEventPublisher.class)
@EnableConfigurationProperties(SecurityProperties.class)
@Import({ SpringBootWebSecurityConfiguration.class, WebSecurityEnablerConfiguration.class,
		SecurityDataConfiguration.class })
public class SecurityAutoConfiguration {

	@Bean
	@ConditionalOnMissingBean(AuthenticationEventPublisher.class)
	public DefaultAuthenticationEventPublisher authenticationEventPublisher(ApplicationEventPublisher publisher) {
		return new DefaultAuthenticationEventPublisher(publisher);
	}

}

SpringBootWebSecurityConfiguration 类

  1. @ConditionalOnMissingBean(WebSecurityConfigurerAdapter.class) 可以看出, 当项目中没有配置 WebSecurityConfigurerAdapter 时, 这个配置类才会生效.

  2. 当这个配置类生效后, 会帮我们配置一个默认的 WebSecurityConfigurerAdapter

  3. 由前面可知, 通过配置 WebSecurityConfigurerAdapter 可以实现定义拦截方式.

@Configuration(proxyBeanMethods = false)
@ConditionalOnClass(WebSecurityConfigurerAdapter.class)
@ConditionalOnMissingBean(WebSecurityConfigurerAdapter.class)
@ConditionalOnWebApplication(type = Type.SERVLET)
public class SpringBootWebSecurityConfiguration {

	@Configuration(proxyBeanMethods = false)
	@Order(SecurityProperties.BASIC_AUTH_ORDER)
	static class DefaultConfigurerAdapter extends WebSecurityConfigurerAdapter {

	}

}

WebSecurityConfigurerAdapter 的默认行为

从下面的默认配置可以得知, 默认的配置是所有的请求都需要登录认证.

protected void configure(HttpSecurity http) throws Exception {
	
    http
       .authorizeRequests()
       // 重点
       .anyRequest().authenticated()
       .and()
       .formLogin().and()
	.httpBasic();
    }

总结

当我们的 Springboot 工程引入 Spring Security 依赖后, 项目中的 “安全机制” 就已经开启了.

因为根据 Spring boot 的自动装配原理, 在加载 SecurityAutoConfiguration 配置类时, 会再加载 SpringBootWebSecurityConfiguration 配置类.

而在 SpringBootWebSecurityConfiguration 类中, 默认帮我们初始化了一个WebSecurityConfigurerAdapter 类.

WebSecurityConfigurerAdapter 的有一个作用就是 配置访问请求需要的权限.

如果不覆盖此类的 configure(HttpSecurity http) 方法, 它的默认行为就是 要求对所有的请求进行登录认证.

到此,相信大家对“为什么加了一个Spring Security依赖所有接口都无法访问”有了更深的了解,不妨来实际操作一番吧!这里是亿速云网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI