springboot 接口 外部系统调用 如何添加用户名密码验证
时间: 2023-12-10 11:03:15 浏览: 72
SpringBoot跨系统单点登陆的实现方法
可以使用 Spring Security 来添加用户名密码验证。Spring Security 是 Spring 家族中用于处理认证和授权的框架。
首先,你需要在 Maven 或 Gradle 中添加依赖:
```xml
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-security</artifactId>
</dependency>
```
然后,在你的 Spring Boot 应用程序中创建一个配置类来配置 Spring Security:
```java
@Configuration
@EnableWebSecurity
public class SecurityConfig extends WebSecurityConfigurerAdapter {
@Override
protected void configure(HttpSecurity http) throws Exception {
http.authorizeRequests()
.antMatchers("/api/**").authenticated()
.anyRequest().permitAll()
.and()
.httpBasic();
}
@Autowired
public void configureGlobal(AuthenticationManagerBuilder auth) throws Exception {
auth.inMemoryAuthentication()
.withUser("user").password("{noop}password").roles("USER");
}
}
```
上面的代码中,我们配置了一个基本的认证机制,当外部系统调用 `/api/**` 接口时,需要进行用户名密码验证。我们在内存中定义了一个用户 `user`,密码为 `password`,角色为 `USER`。
注意,这里使用了 `{noop}` 前缀来表示密码不需要进行加密处理。
现在,当外部系统调用 `/api/**` 接口时,需要在请求头中添加 `Authorization` 字段,值为 `Basic base64(username:password)`,其中 `base64(username:password)` 是对用户名和密码进行 Base64 编码后得到的字符串。
例如,当用户名为 `user`,密码为 `password` 时,请求头应该添加如下内容:
```
Authorization: Basic dXNlcjpwYXNzd29yZA==
```
阅读全文