spring api接口 鉴权
时间: 2023-06-26 21:03:59 浏览: 57
在Spring中实现API接口鉴权,一般可以通过以下步骤实现:
1. 定义一个拦截器,用于在请求到达Controller前进行鉴权。
2. 在拦截器中获取请求头中的认证信息,如Token或API Key等。
3. 在拦截器中进行认证,比如检查Token是否有效、API Key是否正确等。
4. 如果认证失败,拦截器可以直接返回错误信息;如果认证成功,可以放行请求,让请求继续到达Controller。
5. 在Controller中,可以通过注解方式限制只有通过鉴权的请求才能访问某些接口。
下面是一个简单的示例代码:
```java
@Component
public class AuthInterceptor implements HandlerInterceptor {
@Autowired
private AuthService authService;
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
String authHeader = request.getHeader("Authorization");
if (authHeader != null && authHeader.startsWith("Bearer ")) {
String authToken = authHeader.substring(7);
if (authService.validateToken(authToken)) {
return true;
}
}
response.setStatus(HttpStatus.UNAUTHORIZED.value());
return false;
}
}
@RestController
@RequestMapping("/api")
public class MyApiController {
@GetMapping("/user")
@PreAuthorize("hasAuthority('USER')")
public ResponseEntity<User> getUser() {
// implement the logic to retrieve user information
}
@GetMapping("/admin")
@PreAuthorize("hasAuthority('ADMIN')")
public ResponseEntity<Admin> getAdmin() {
// implement the logic to retrieve admin information
}
}
```
在上面的示例中,我们定义了一个拦截器`AuthInterceptor`,用于在请求到达Controller前进行鉴权。在拦截器中,我们获取了请求头中的Authorization信息,然后调用`authService.validateToken`方法进行验证。如果验证成功,就放行请求;如果验证失败,就返回401错误。
在Controller中,我们通过注解方式限制了只有具有`USER`或`ADMIN`权限的请求才能访问`/api/user`和`/api/admin`接口。这些权限可以通过Spring Security进行配置。