Spring Security认证与授权全解析
- 作者: 五速梦信息网
- 时间: 2026年03月21日 04:37
permissions = loginUser.getPermissions();
return permissions.contains(permission);
}
}
```csharp
@RestController
@RequestMapping("/user")
public class UserController {
@Resource
private IUserService sysUserService;
@GetMapping("/living")
@PreAuthorize("@auth.hasPermission('living')")
public Result living() {
return Result.success("可以开房");
}
@GetMapping("/upgrade")
@PreAuthorize("@auth.hasPermission('upgrade')")
public Result upgrade() {
return Result.success("可以升级房型");
}
@GetMapping("/freeBreakfast")
@PreAuthorize("@auth.hasPermission('freeBreakfast')")
public Result freeBreakfast() {
return Result.success("有免费早餐");
}
@PostMapping("/login")
public Result login(@RequestBody LoginRequest request) {
return sysUserService.login(request);
}
}
异常处理方法
- 在遇到认证失败和授权失败时,我们希望可以放回与接口相同的json结构,这样可以让前端进行统一处理
- 如果认证过程中出现异常会被封装成AuthenticationException如何调用
AuthenticationEntryPoint对象的方法去进行异常处理
”`csharp
@Component
public class AuthenticationEntryPointImpl implements AuthenticationEntryPoint {
@Override
public void commence(HttpServletRequest request, HttpServletResponse response, AuthenticationException authException) throws IOException, ServletException {
response.setContentType(“application/json;charset=utf-8”);
response.getWriter().write(
JSON.toJSONString(Result.fail(401, "用户身份认证不通过"))
);
}
}
```
- 如果授权过程中出现的异常就会被封装AccessDeniedException然后调用AuthenticationEntryPoint对象的方法进行异常处理
”`csharp
@Component
public class AuthenticationEntryPointImpl implements AuthenticationEntryPoint {
@Override
public void commence(HttpServletRequest request, HttpServletResponse response, AuthenticationException authException) throws IOException, ServletException {
response.setContentType(“application/json;charset=utf-8”);
response.getWriter().write(
JSON.toJSONString(Result.fail(401, "用户身份认证不通过"))
);
}
}
```
在SecurityConfig中进行配置
- 注入处理器
”`csharp
@Resource
private AccessDeniedHandlerImpl accessDeniedHandler;
@Resource
private AuthenticationEntryPointImpl authenticationEntryPoint;
```
- 在使用http进行配置
”`csharp
// 配置异常处理器
http
.exceptionHandling()
.accessDeniedHandler(accessDeniedHandler)
.authenticationEntryPoint(authenticationEntryPoint);
```
相关文章
-
Spring Ioc源码引入:什么是IoC,IoC解决了什么问题
Spring Ioc源码引入:什么是IoC,IoC解决了什么问题
- 互联网
- 2026年03月21日
-
SpreadJS Excel到表格应用的数据验证功能嵌入实践
SpreadJS Excel到表格应用的数据验证功能嵌入实践
- 互联网
- 2026年03月21日
-
Souman漫画:分类分区与特色功能
Souman漫画:分类分区与特色功能
- 互联网
- 2026年03月21日
-
Spring 中@Autowired,@Resource,@Inject 注解实现原理
Spring 中@Autowired,@Resource,@Inject 注解实现原理
- 互联网
- 2026年03月21日
-
SpringBoot Task定时任务参数详解与应用
SpringBoot Task定时任务参数详解与应用
- 互联网
- 2026年03月21日
-
SpringBoot3与SpringSecurity6整合快速入门
SpringBoot3与SpringSecurity6整合快速入门
- 互联网
- 2026年03月21日








