我有一个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
?
由于
答案 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");
}
希望这有帮助。