springboot业务接口实现应用授权
时间: 2023-10-18 14:18:12 浏览: 107
springboot实现web系统Licence验证
3星 · 编辑精心推荐
在 Spring Boot 中,我们可以使用 Spring Security 来实现应用授权。下面是一个简单的示例:
1. 添加依赖
在 pom.xml 文件中添加 Spring Security 的依赖:
```xml
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-security</artifactId>
</dependency>
```
2. 配置类
创建一个配置类来配置 Spring Security:
```java
@Configuration
@EnableWebSecurity
public class SecurityConfig extends WebSecurityConfigurerAdapter {
@Autowired
private UserService userService;
@Override
protected void configure(HttpSecurity http) throws Exception {
http.authorizeRequests()
.antMatchers("/api/**").authenticated()
.anyRequest().permitAll()
.and().formLogin().permitAll()
.and().logout().permitAll();
}
@Override
protected void configure(AuthenticationManagerBuilder auth) throws Exception {
auth.userDetailsService(userService).passwordEncoder(passwordEncoder());
}
@Bean
public PasswordEncoder passwordEncoder() {
return new BCryptPasswordEncoder();
}
}
```
在这个配置类中,我们使用 `@EnableWebSecurity` 注解来启用 Spring Security,并继承 `WebSecurityConfigurerAdapter` 类来配置安全策略。在 `configure(HttpSecurity http)` 方法中,我们定义了用户需要认证才能访问 `/api/**` 的接口,其他所有接口都可以匿名访问。在 `configure(AuthenticationManagerBuilder auth)` 方法中,我们使用 `userService` 来获取用户信息,并使用 `BCryptPasswordEncoder` 对密码进行加密。
3. 用户服务
创建一个用户服务来提供用户信息:
```java
@Service
public class UserService implements UserDetailsService {
@Autowired
private UserRepository userRepository;
@Override
public UserDetails loadUserByUsername(String username) throws UsernameNotFoundException {
User user = userRepository.findByUsername(username);
if (user == null) {
throw new UsernameNotFoundException("User not found");
}
return new org.springframework.security.core.userdetails.User(user.getUsername(), user.getPassword(),
Collections.emptyList());
}
}
```
在这个用户服务中,我们使用 `UserRepository` 来获取用户信息,并将其转换为 `UserDetails` 对象。`UserDetails` 对象包含用户名、密码和用户角色等信息。
4. 控制器
创建一个控制器来测试接口权限:
```java
@RestController
@RequestMapping("/api")
public class ApiController {
@GetMapping("/hello")
public String hello() {
return "Hello, world!";
}
@PostMapping("/login")
public void login() {
// do nothing
}
}
```
在这个控制器中,我们定义了一个 `/api/hello` 的接口,该接口需要认证才能访问。我们还定义了一个 `/api/login` 的接口,该接口用于登录,但实际上并不做任何事情。
5. 测试
启动应用程序后,我们可以使用 Postman 等工具来测试接口的权限。首先,我们需要使用 `/api/login` 接口来登录:
```
POST http://localhost:8080/api/login
Content-Type: application/json
{
"username": "admin",
"password": "admin"
}
```
登录成功后,我们可以使用 `/api/hello` 接口来测试:
```
GET http://localhost:8080/api/hello
Authorization: Bearer <access_token>
```
其中,`<access_token>` 是登录成功后返回的访问令牌。如果访问令牌有效,则会返回 `Hello, world!`,否则会返回 401 错误。
这就是一个简单的 Spring Boot 应用程序中实现授权的示例。当然,实际应用中可能会涉及到更复杂的授权场景,需要根据具体情况来进行处理。
阅读全文