Mar*_*lka 3 java authentication spring spring-mvc spring-security
我查阅了有关使用 Spring Security 的文章,但它们并不能完全满足我的需求。他们通常处理内存中的用户和明文密码。
我想要达到的目标:
客户端使用基本身份验证进行身份验证。
安全控制器方法如下所示:
@RequestMapping(value = "/test")
public ResponseEntity test(@AuthenticationPrincipal MyUser user){
// Logic
}
Run Code Online (Sandbox Code Playgroud)
如果给定用户已通过身份验证,我希望控制器方法在其参数中获取一个 MyUser 对象,否则为 null。
我将散列密码和用户的盐存储在数据库中,并且我有一个服务,该服务对给定的用户名-密码对进行身份验证,并在身份验证成功或失败时分别返回一个 User 对象或 null。
现在需要做的就是拦截每个请求,查看基本身份验证标头,将信息传递给我的自定义身份验证服务,然后将其结果传递给控制器方法。不幸的是,我无法做到这一点。
我继续阅读使用 custom 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();
}
}
Run Code Online (Sandbox Code Playgroud)
您可以通过 3 种不同的方式进行基本身份验证 -
1 - 只需添加 spring-security Maven 依赖项
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-security</artifactId>
</dependency>
Run Code Online (Sandbox Code Playgroud)
自动启用基本身份验证,如用户名 - “用户”和密码,您可以使用默认安全密码在控制台中找到 - “bdd42ed9-635d-422b-9430-ce463625fd2e”
2 - 为安全性创建一个配置类,如下面的代码
@Configuration
@EnableWebSecurity
public class SpringSecurityConfig extends WebSecurityConfigurerAdapter {
@Autowired
private AuthenticationEntryPoint authEntryPoint;
@Override
protected void configure(HttpSecurity http) throws Exception {
http.csrf().disable().authorizeRequests().anyRequest().authenticated().and().httpBasic();
}
@Autowired
public void configureGlobal(AuthenticationManagerBuilder auth) throws Exception {
auth.inMemoryAuthentication().withUser("user").password("password").roles("USER");
}
}
Run Code Online (Sandbox Code Playgroud)
3 - 另一种方法是在 application.properties 文件中添加默认用户名和密码,如下所示
security.user.name=user
security.user.password=password
Run Code Online (Sandbox Code Playgroud)
并创建如下代码的配置类
@Configuration
public class SpringSecurityConfig extends WebSecurityConfigurerAdapter {
@Override
protected void configure(HttpSecurity http) throws Exception {
http.csrf().disable().authorizeRequests().anyRequest().authenticated().and().httpBasic();
}
}
Run Code Online (Sandbox Code Playgroud)
仍然有一些疑问,然后单击下面的链接并观看此视频
| 归档时间: |
|
| 查看次数: |
13561 次 |
| 最近记录: |