spring secruity 教程自定义 403 页面

前面一篇文章试验了ROLE_USER,ROLE_ADMIN 不同的权限,当不满足权限的时候,spring security 会出现一个 很丑陋的 403 页面,一点都不友好,所以在很多情况下,需要定制一个 403的页面来显示用户没有权限访问.
原始的 403 页面如下:

为了让程序不显示这么丑陋的页面,先自己定义一个403.jsp页面,比较简陋,美工自己处理
程序代码 程序代码

<bean id="accessDeniedHandler"
    class="com.mkyong.common.handler.MyAccessDeniedHandler">
    <property name="accessDeniedUrl" value="403" />
   </bean>

将有两种方法可以定制 403 错误页面.

方法一, 配置 access-denied-handler 方式实现
程序代码 程序代码

    <http pattern="/app/403" security="none" />
    
    <http auto-config="true">        
        <intercept-url pattern="/app/admin*" access="ROLE_ADMIN" />
        <access-denied-handler error-page="/app/403" />
        <form-login login-page="/app/login" default-target-url="/app/admin"
            authentication-failure-url="/app/loginfailed"  />
        <logout logout-success-url="/app/logout" />
    </http>


另外,还需要实现一个 403 页面的controller
程序代码 程序代码

@RequestMapping(value = "/403", method = RequestMethod.GET)
    public String errorpage(ModelMap model) {
        model.addAttribute("message", "你没有访问权限");
        return "403";

    }


方法二, 实现 spring 的 AccessDeniedHandler, 重写 handle() 方法
程序代码 程序代码

package com.yihaomen.accesshandle;

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 MyAccessDeniedHandler implements AccessDeniedHandler {
    private String accessDeniedUrl;

    public MyAccessDeniedHandler() {
    }

    public MyAccessDeniedHandler(String accessDeniedUrl) {
        this.accessDeniedUrl = accessDeniedUrl;
    }


    public void handle(HttpServletRequest request,
        HttpServletResponse response,
        AccessDeniedException accessDeniedException) throws IOException,
        ServletException {

       response.sendRedirect(accessDeniedUrl);
       request.getSession().setAttribute("message","你没有权限访问这个页面!");

    }

    public String getAccessDeniedUrl() {
        return accessDeniedUrl;
    }

    public void setAccessDeniedUrl(String accessDeniedUrl) {
        this.accessDeniedUrl = accessDeniedUrl;
    }
}



然后在 spring-mvc-servlet.xml 中配置bean
程序代码 程序代码

<bean id="accessDeniedHandler" class="com.yihaomen.accesshandle.MyAccessDeniedHandler" >
        <property name="accessDeniedUrl" value="/springSecurity005/app/403" />
     </bean>


在spring security.xml 中配置
程序代码 程序代码

  <!-- 第二种方法 -->
  
    <http auto-config="true">
        <intercept-url pattern="/app/admin*" access="ROLE_ADMIN" />
        <access-denied-handler ref="accessDeniedHandler"/>
        <form-login login-page="/app/login" default-target-url="/app/admin"
            authentication-failure-url="/app/loginfailed"  />
        <logout logout-success-url="/app/logout" />
    </http>
    <!-- 第二种方法结束 -->


运行程序,用ROLE_USER 权限的 yihaomen 用户登录,出现自定义错误页面,说明自定义页面成功,而用ROLE_ADMIN 可以成功访问页面, 自定义页面如下:


源代码下载:
下载文件 spring security 自定义 403 错误页面



除非申明,文章均为一号门原创,转载请注明本文地址,谢谢!
文章来自: 本站原创
引用通告: 查看所有引用 | 我要引用此文章
Tags: spring security
相关日志:
评论: 0 | 引用: 0 | 查看次数: -
发表评论
昵 称:
密 码: 游客发言不需要密码.
内 容:
验证码: 验证码
选 项:
虽然发表评论不用注册,但是为了保护您的发言权,建议您注册帐号.