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