Spring Boot [集成-Spring Security]-(登录校验方式)

本文详细介绍了SpringSecurity的认证过程,认证由AuthenticationManager管理,并通过AuthenticationProvider执行具体认证逻辑。通常情况下,未指定Provider时,默认使用DaoAuthenticationProvider,它依赖于UserDetailsService来获取用户信息。

1、spring security认证过程:

Spring Security认证是由 AuthenticationManager 来管理的,但是真正进行认证的是 AuthenticationManager 中定义的 AuthenticationProvider。

AuthenticationManager 中可以定义有多个 AuthenticationProvider。当我们使用 authentication-provider 元素来定义一个 AuthenticationProvider 时,如果没有指定对应关联的 AuthenticationProvider 对象。

Spring Security 默认会使用 DaoAuthenticationProvider。DaoAuthenticationProvider 在进行认证的时候需要一个 UserDetailsService 来获取用户的信息 UserDetails,其中包括用户名、密码和所拥有的权限等。

所以如果我们需要改变认证的方式,我们可以实现自己的 AuthenticationProvider;如果需要改变认证的用户信息来源,我们可以实现 UserDetailsService。

仅做笔记,如有不好的地方也可多多指教。

详情请查看:https://segmentfault.com/a/1190000008893479

AuthenticationManager 与UserDetailsService结合使用的demo:https://gitee.com/hong_ej/SpringSecurity.git



<think>嗯,用户遇到了Spring Boot集成Security时出现401未授权的问题,想要解决方案。首先,我需要回忆一下常见的401错误原因和解决办法。根据引用[1],当Spring MVC不知道已登录用户时,会抛出500错误,所以添加Spring Security starter可能解决。但用户的问题是401,这通常与认证失败有关。 401未授权通常意味着请求缺少有效的身份验证凭证。可能用户没有正确配置安全设置,或者端点需要认证但请求未提供凭证。引用[2]提到,可以通过修改AuthenticationEntryPoint来改变401的挑战方式,避免浏览器弹出认证对话框。这可能是一个解决办法。 接下来,检查用户的配置是否正确。例如,是否所有端点都被默认保护,而用户没有登录。或者,可能缺少用户服务端点,如引用[3]中的/user端点,用于返回当前用户信息。如果前端需要获取用户信息,但后端没有暴露该端点,也会导致401错误。 另外,引用[4]提到资源服务器的配置,如果用户将UI和资源服务器分开,可能需要正确配置资源服务器,确保令牌的验证和端点的权限设置正确。 可能的解决步骤包括:1. 添加Spring Security Starter依赖;2. 配置安全规则,允许匿名访问某些路径;3. 自定义用户端点;4. 修改认证入口点;5. 检查资源服务器配置。需要确保这些步骤中的每一个都被正确实施,并考虑用户的具体场景,比如是否使用OAuth2或HTTP Basic等认证方式。</think>### Spring Boot Security 401未授权问题解决方案 当Spring Boot集成Security出现401错误时,通常由以下原因导致: 1. **未配置用户服务端点** - 前端请求`/user`端点获取登录信息时,后端未暴露该接口 - 解决方案:添加用户信息接口 ```java @RestController public class AuthController { @GetMapping("/user") public Principal user(Principal user) { return user; } } ``` 参考实现来自示例代码[^3] 2. **安全配置过于严格** - 默认配置会拦截所有请求 - 解决方案:自定义安全配置 ```java @Configuration @EnableWebSecurity public class SecurityConfig extends WebSecurityConfigurerAdapter { @Override protected void configure(HttpSecurity http) throws Exception { http .authorizeRequests() .antMatchers("/public/**").permitAll() .anyRequest().authenticated() .and() .httpBasic() .authenticationEntryPoint(new CustomEntryPoint()); } } ``` 引用[^2]建议通过自定义AuthenticationEntryPoint修改认证响应头 3. **依赖缺失** - 确保pom.xml包含必要依赖 ```xml <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-security</artifactId> </dependency> ``` 如引用[^1]所述,缺少Security Starter会导致认证失败 4. **跨服务认证问题** - 当使用独立资源服务器时,需要正确配置令牌校验 ```java @Configuration @EnableResourceServer public class ResourceServerConfig extends ResourceServerConfigurerAdapter { @Override public void configure(HttpSecurity http) throws Exception { http .requestMatchers().antMatchers("/api/**") .and() .authorizeRequests().anyRequest().authenticated(); } } ``` 参考资源服务器配置建议[^4]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值