我有控制器方法,用
注释@RequestMapping(value = "/someting")
@PreAuthorize("hasAnyRole('ROLE_ACTIVE')")
...
当没有角色的用户在此映射上传输时,我想让没有相应角色的用户重定向到主页并显示警报,拒绝访问这一事实。
为了解决这个问题,我制作了自定义的AccessDeniedHandler,它运行良好,但仅适用于经过身份验证的用户
对于没有身份验证的用户,我找到了AuthenticationEntryPoint 它看起来像
public class CustomAuthenticationEntryPoint implements AuthenticationEntryPoint {
@Override
public void commence(HttpServletRequest httpServletRequest,
HttpServletResponse httpServletResponse,
AuthenticationException e) throws IOException, ServletException {
FlashMap flashMap = RequestContextUtils.getOutputFlashMap(httpServletRequest);
if(flashMap != null) {
Alerts.addWarningAlert(flashMap, "access denied");
}
httpServletResponse.sendRedirect("/");
}
}
我的警报只能添加到我的主页的flash属性或模型中,但此方法中的flash map始终具有空值
如何在不重定向到其他控制器的情况下解决它,然后重定向到主页并为模型增加价值?或者我可以将我的flash属性添加到http servlet响应吗?
答案 0 :(得分:0)
可以使用Session属性。我添加了属性,然后从警报处理程序中的Session中获取此属性。