【Spring Security】1. 快速入门

这是一个简单的Spring Security示例,主要功能:开启访问限制,并且所有请求都需要进行认证;同时开启了表单登录,以及在application.yml中配置了用户名和密码。

如果不配置用户名和密码,则默认的用户名为user,在启动服务时自动生成默认密码并输出到日志

版本依赖

后续内容都以下列版本为基础

  • JDK 1.8
  • Spring Boot 2.4.0
  • Spring Security 5.4.1

主要代码


@Configuration
public class SecurityConfig extends WebSecurityConfigurerAdapter {
    
    @Override
    protected void configure(HttpSecurity http) throws Exception {
        http.authorizeRequests().anyRequest().authenticated();
        http.formLogin();
    }
}


spring:
  security:
    user:
      name: admin
      password: 123456

http.authorizeRequests()用于开启访问限制;anyRequest().authenticated()表示对所有请求都需要经过认证才能访问。

http.formLogin()用于开启表单登录。

实现原理

默认用户和密码是由org.springframework.boot.autoconfigure.security.servlet.UserDetailsServiceAutoConfiguration配置类生成的。


@Configuration(proxyBeanMethods = false)
@ConditionalOnClass(AuthenticationManager.class)
@ConditionalOnBean(ObjectPostProcessor.class)
@ConditionalOnMissingBean(
		value = { AuthenticationManager.class, AuthenticationProvider.class, UserDetailsService.class },
		type = { "org.springframework.security.oauth2.jwt.JwtDecoder",
				"org.springframework.security.oauth2.server.resource.introspection.OpaqueTokenIntrospector" })
public class UserDetailsServiceAutoConfiguration {
    // 省略若干代码
    @Bean
	@ConditionalOnMissingBean(
			type = "org.springframework.security.oauth2.client.registration.ClientRegistrationRepository")
	@Lazy
	public InMemoryUserDetailsManager inMemoryUserDetailsManager(SecurityProperties properties,
			ObjectProvider<PasswordEncoder> passwordEncoder) {
		SecurityProperties.User user = properties.getUser();
		List<String> roles = user.getRoles();
		return new InMemoryUserDetailsManager(
				User.withUsername(user.getName()).password(getOrDeducePassword(user, passwordEncoder.getIfAvailable()))
						.roles(StringUtils.toStringArray(roles)).build());
	}
}

从注解上可以得知,当类路径下存在AuthenticationManager类型, 且Spring容器中存在ObjectPostProcessor实例,
但不存在AuthenticationManager, AuthenticationProvider, UserDetailsService实例的情况下,提供一个基于内存的UserDetailsManager

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值