java如果用户没有正确的角色,如何重定向?春季安全
我有一个SpringBoot控制器,该控制器返回几个Confidencial信息,该信息只能由具有特殊角色的人访问,对于我想重定向到其他控制器的其他角色。
我正在使用@preAuutorize('hasRole()')
检查用户角色。
请看这个例子
@PreAuthorize("hasRole('COLOMBIAN_PRESIDENT')")
@GetMapping("/colombia/status")
public ModelAndView showColombiaStatus(){
//This controller can be accessed by colombian president
//for other people, to redirect to showPublicInformation.
}
@GetMapping(value = {"/colombia/public-information"})
public ModelAndView showPublicInformation(){
//for any people
}
如果任何用户没有COLOMBIAN_PRESIDENT
角色,我想重定向到showPublicInformatio()
如果用户没有名为COLOMBIAN_PRESIDENT
的角色,如何从showColombiaStatus
重定向到showPublicInformation
谢谢
# 1 楼答案
在控制器中添加
@ExceptionHandler
,例如:希望这有帮助
# 2 楼答案
我不会使用
@ExceptionHandler
方法,而是使用org.springframework.security.web.access.AccessDeniedHandler
,即避免将通用异常处理与安全异常混合您需要在类实现接口
AccessDeniedHandler
中的handle
方法中编写重定向。在这种方法中,您还可以跟踪所有用户试图登录到系统的内容,以及哪些用户被拒绝访问您可以在
auth
对象下面检查null,以了解访问是否被拒绝Authentication auth = SecurityContextHolder.getContext().getAuthentication();
您可以创建这个处理程序的bean,并在安全配置中进行如下设置-
.exceptionHandling().accessDeniedHandler(accessDeniedHandler());