如果用户没有正确的角色,如何重定向?春季安全

时间:2018-01-21 22:57:04

标签: java spring-boot spring-security

我有一个SpringBoot控制器,该控制器返回几个conffidencial信息,并且该信息只能由具有特殊角色的人访问,对于我想要重定向到其他控制器的其他角色。 我使用df1=pd.DataFrame([1,'a']) df2=pd.DataFrame([2,'b']) pd.concat([df1,df2],ignore_index=True) Out[873]: 0 0 1 1 a 2 2 3 b 检查用户角色。 请参阅示例

@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 }

,我想重定向到showPublicInformatio()

如果用户没有名为COLOMBIAN_PRESIDENT的角色,如何从showColombiaStatus重定向到showPublicInformation

由于

2 个答案:

答案 0 :(得分:2)

我不会通过@ExceptionHandler方法而是通过org.springframework.security.web.access.AccessDeniedHandler,这样可以避免将通用异常处理与安全异常混合在一起。

您需要在实现接口handle的类中的AccessDeniedHandler方法中编写重定向。在此方法中,您还可以跟踪所有用户尝试登录系统的内容以及拒绝用户访问的内容。

您可以在下面的auth对象中查看null,以了解是否拒绝访问。

Authentication auth = SecurityContextHolder.getContext().getAuthentication();

您可以创建此处理程序的bean并在此安全配置中设置 -  .exceptionHandling().accessDeniedHandler(accessDeniedHandler());

答案 1 :(得分:1)

向控制器添加@ExceptionHandler,例如:

@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
}

@ExceptionHandler(AccessDeniedException.class)
public void handleError(HttpServletResponse response){
    response.sendRedirect("/colombia/public-information");
}

希望这有帮助。