Spring Security:自定义403访问拒绝页面

时间:2020-02-23 14:36:00  来源:igfitidea点击:

在本教程中,我们将看到如何自定义403访问拒绝页面。

如果用户无权访问页面,那么它将显示默认的403页面,如下所示:

我们可以如下定制403页:

如果要配置自定义403访问拒绝页面,则有两种方法可以执行此操作。

  • 使用访问拒绝处理程序错误页面
  • 使用AccessDeniedHandler

使用访问拒绝处理程序错误页面

我们可以在Spring-security.xml中为spring-security.xml中的属性访问拒绝处理程序投入条目。

<http auto-config="true" use-expressions="true">
  <access-denied-handler error-page="/403" 
 ... other entries
 </http>

因此,如果用户无法访问页面,则将重定向到/403,我们可以在控制器类中处理403:

//for 403 access denied page
  @RequestMapping(value = "/403", method = RequestMethod.GET)
  public ModelAndView accesssDenied(Principal user) {
 
   ModelAndView model = new ModelAndView();
   if (user != null) {
    model.addObject("msg", "Hi " + user.getName()
    + ", You can not access this page!");
   } else {
    model.addObject("msg",
    "You can not access this page!");
   }
 
   model.setViewName("403");
   return model;
  }

我们可以创建403.jsp如下所示:

<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>  
<html>
<body>
 <h1>HTTP Status 403 - Access is denied</h1>
<h2>${msg}</h2>
<c:url value="/j_spring_security_logout" var="logoutUrl" 
<a href="${logoutUrl}">Log Out</a>
</body>
</html>

有关Spring-Security,请参阅Spring Security Databy身份验证。

XML和其他文件。
使用AccessDeniedHandler Ref:我们还可以使用AccessDeniedHandler来处理403访问拒绝页面。

package org.igi.theitroad.handler;
 
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.springframework.security.access.AccessDeniedException;
import org.springframework.security.web.access.AccessDeniedHandler;
 
public class CustomAccessDeniedHandler implements AccessDeniedHandler {
 
 private String errorPage;
 
 public CustomAccessDeniedHandler() {
 }
 
 public CustomAccessDeniedHandler(String errorPage) {
  this.errorPage = errorPage;
 }
 
 public String getErrorPage() {
  return errorPage;
 }
 
 public void setErrorPage(String errorPage) {
  this.errorPage = errorPage;
 }
 
 @Override
 public void handle(HttpServletRequest request, HttpServletResponse response,
  AccessDeniedException accessDeniedException)
                throws IOException, ServletException {
 
  //You can redirect to errorpage
  response.sendRedirect(errorPage);
 }
}

我们需要在Spring-Security.xml中添加HTTP标记中的REF。

<http auto-config="true" use-expressions="true">
  <access-denied-handler ref=custom403 
 </http>
<beans:bean id="custom403"
class="org.igi.theitroad.handler.CustomAccessDeniedHandler">
<beans:property name="errorPage" value="403" 
... other entries