如何从Spring安全性AccessDeniedHandler重定向到同一页面

时间:2018-03-21 20:54:50

标签: spring jsp spring-mvc spring-security

我在Spring MVC应用程序中创建了CustomAccessDeneiedHandler类,它实现了AccessDeniedHandler接口,如下所示。

    public class CustomAccessDeniedHandler implements AccessDeniedHandler {
     
        @Override
        public void handle(HttpServletRequest request, HttpServletResponse response, AccessDeniedException exc) throws IOException, ServletException {
            response.sendRedirect(request.getContextPath() + "/accessDenied");
        }
   }

这将使用"/accessDenied" URI调用控制器GET方法,并在内部返回特定于访问被拒绝错误的JSP视图。

但是,我不想重定向到单独的视图,而是想在同一页面上显示一条警告消息,上面写着“你没有权限执行此任务”。

是否有任何解决方法可以将响应发送回请求页面的来源并在该页面上显示错误消息? 我尝试了很多不同的方法,但似乎没有什么对我有用,因为我尝试的每个解决方案都是调用控制器方法,并且正在重定向/重新呈现相同或不同的视图。

所以我还没有找到解决这个问题的标准解决方案。任何帮助表示赞赏。

1 个答案:

答案 0 :(得分:0)

你可以借助javascript,

来做到这一点
@RequestMapping( value ="/accessDeniedHandler")
public String accessDeniedModal()
{
//Do something here and return modal

return "accessDeniedModal";
}

和jsp这样,

<html>
  <head>
    <script>
      function loadModalWindow() {
         // open your window here
         $('<div id="myModal" class="modal hide fade" tabindex="-1" role="dialog" aria-labelledby="myModalLabel" aria-hidden="true">
   <div class="modal-header">
      <button type="button" class="close" data-dismiss="modal" aria-hidden="true">×</button>
      <h3 id="myModalLabel">Access Denied</h3>
  </div>
    <div class="modal-body">
      <p> <Your message> <p>
   </div>
  <div class="modal-footer">
    <button class="btn" data-dismiss="modal" aria-hidden="true">Close</button>
</div>
 </div>').modal('show'); 
      }
   </script>
   </head>

    <body onload="loadModalWindow()">

    </body>
 </html>

瞧,你的模态将在html之上打开。