spring认证入口点

时间:2015-09-30 06:57:26

标签: spring security

我有控制器方法,用

注释
@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响应吗?

1 个答案:

答案 0 :(得分:0)

可以使用Session属性。我添加了属性,然后从警报处理程序中的Session中获取此属性。