我已经查阅了关于使用Spring Security的文章,但它们并不能完全满足我的需求。它们通常处理内存用户和明文密码。
我想要实现的目标:
客户端使用基本认证进行身份验证。
安全控制器方法如下所示:
如果给定的用户已通过身份验证,则希望控制器方法在其参数中获取MyUser对象,否则为null。
我将用户的哈希密码和盐存储在数据库中,并且我有一个服务,用于验证给定的用户名密码对,并返回用户对象或null(如果验证成功或失败)。
现在需要拦截每个请求,查看基本身份验证标头,将信息传递给我的自定义身份验证服务,然后将其结果传递到控制器方法。不幸的是,我还没有能够做到这一点。
我阅读了有关使用自定义UserDetailsService的内容,但似乎仅处理从数据库中提取用户数据,而不涉及任何身份验证。我无法弄清如何将所有组件连接在一起。
您能指导我如何使这个相当简单的工作流程正常工作吗?
编辑
我没有使用XML配置,我唯一与安全相关的配置是:
安全控制器方法如下所示:
@RequestMapping(value = "/test")
public ResponseEntity test(@AuthenticationPrincipal MyUser user){
// Logic
}
如果给定的用户已通过身份验证,则希望控制器方法在其参数中获取MyUser对象,否则为null。
我将用户的哈希密码和盐存储在数据库中,并且我有一个服务,用于验证给定的用户名密码对,并返回用户对象或null(如果验证成功或失败)。
现在需要拦截每个请求,查看基本身份验证标头,将信息传递给我的自定义身份验证服务,然后将其结果传递到控制器方法。不幸的是,我还没有能够做到这一点。
我阅读了有关使用自定义UserDetailsService的内容,但似乎仅处理从数据库中提取用户数据,而不涉及任何身份验证。我无法弄清如何将所有组件连接在一起。
您能指导我如何使这个相当简单的工作流程正常工作吗?
编辑
我没有使用XML配置,我唯一与安全相关的配置是:
@Configuration
@Order(SecurityProperties.ACCESS_OVERRIDE_ORDER)
public class ApplicationSecurity extends WebSecurityConfigurerAdapter {
@Override
public void configure(HttpSecurity http) throws Exception {
http.antMatcher("/**").csrf().disable();
http.authorizeRequests()
.antMatchers("/user").permitAll()
.antMatchers("/user/**").permitAll()
.anyRequest().authenticated();
}
}
<http-basic />
添加到<http>
标签中(如果您正在使用XML样式配置)。为了得到更具体的答案,您可以在帖子中添加一些有关您的配置的详细信息。例如,配置文件/类和web.xml
(如果有的话)。 - Stefano Cazzola