03拦截器

本文详细介绍了如何在SpringMVC应用中实现未经授权访问的拦截,包括将jsp页面保护、自定义HandlerInterceptor、配置拦截器策略,以及排除特定静态资源的方法。确保只有经过登录的用户才能访问关键动态资源。
摘要由CSDN通过智能技术生成

拦截未经授权的访问

一、思路:

(1)将所有的jsp页面放在WEB-INF目录下,除了欢迎页面(或登录页面)

​ 因为springmvc提供的拦截器只能拦截controller,不能拦截静态资源

(2)定义类实现HandlerInterceptor接口,创建拒绝未授权访问的视图error-403.jsp

(3)在springmvc配置文件中,声明拦截器,让框架知道拦截器的存在

(4)对/user/login放行,对所有静态资源放行

二、定义LoginIntercepter类

LoginInterceptor 类

  • 当没有获取到用户的session时,请求转发到错误提醒页面
public class LoginInterceptor implements HandlerInterceptor {
    //验证登录信息
    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
        System.out.println("拦截器");
        String loginName="";
        //从session中获取name的值
        Object attr=request.getSession().getAttribute("user");
        if(attr!=null){
            return true;
        }else {
            request.getRequestDispatcher("/WEB-INF/jsp/error-403.jsp").forward(request, response);
                //request.setAttribute("msg", "您还没有登录,请先登录!");
                //request.getRequestDispatcher("/login.jsp").forward(request, response);
        }
        return true;
    }
}

三、springmvc配置

  • 虽然拦截器本身并不拦截静态资源,但是我们在前面配置了springmvc提供的处理器对象来处理静态资源。所以拦截器也会拦截static中存放的所有静态资源,因此需要对这些静态资源放行。
  • 对login处理器方法放行
   <!--声明拦截器-->
   <mvc:interceptors>
      <mvc:interceptor>
          <!--指定拦截的请求的uri地址,可以使用通配符
          **:表示任意的字符、文件或多级目录和目录中的文件-->
          <mvc:mapping path="/**"/>
          <!--放行login处理器方法以及静态资源-->
          <mvc:exclude-mapping path="/user/login" />
          <mvc:exclude-mapping path="/**/fonts/*"/>
          <mvc:exclude-mapping path="/**/*.css"/>
          <mvc:exclude-mapping path="/**/*.js"/>
          <mvc:exclude-mapping path="/**/*.png"/>
          <mvc:exclude-mapping path="/**/*.gif"/>
          <mvc:exclude-mapping path="/**/*.jpg"/>
          <mvc:exclude-mapping path="/**/*.jpeg"/>
   <!--声明拦截器对象-->
           <bean class="com.example.handler.LoginInterceptor"/>
    </mvc:interceptor>
</mvc:interceptors>

四、效果

1、未登录时,在地址栏输入/user/index访问动态资源

image-20210728212623429

2、拦截器拦截该请求,并跳转到登录异常页面

image-20210728212725744
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值