springMVC拦截器返回错误信息给前端

springMVC拦截器的preHandle方法返回值是Boolean类型,所以条件够就放行,执行方法,而条件不足,前端无法知道是什么原因而被拦截,下面来解决这个问题。

一. 编写一个拦截器(该拦截器作用是:判断用户是否登录并且权限是否足够)

package com.mmall.controller.common.intercept;

import com.mmall.common.Constants;
import com.mmall.common.ResponseCode;
import com.mmall.common.ServerResponse;
import com.mmall.pojo.User;
import com.mmall.util.JsonUtil;
import lombok.extern.slf4j.Slf4j;
import org.springframework.web.servlet.HandlerInterceptor;
import org.springframework.web.servlet.ModelAndView;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import java.io.PrintWriter;

/**
 * @author Luyue
 * @date 2018/8/17 18:02
 **/
@Slf4j
public class AuthorityTestIntercepter implements HandlerInterceptor {
    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
        HttpSession session = request.getSession();
        User user = (User) session.getAttribute(Constants.CURRENT_USER);
        if (user == null || user.getRole().intValue() != Constants.ROLE.ROLE_ADMIN) {
            return false;
        }

        log.info("preHandle");
        return true;
    }

    @Override
    public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {

    }

    @Override
    public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {

    }
}

二. 注册该拦截器
在这里插入图片描述
具体拦截路径可以自行更改

三. 更改拦截器,返回信息给前端

不改变之前: 什么信息都没有
在这里插入图片描述
更改拦截器:

public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
HttpSession session = request.getSession();
User user = (User) session.getAttribute(Constants.CURRENT_USER);
if (user == null || user.getRole().intValue() != Constants.ROLE.ROLE_ADMIN) {
//重置response
response.reset();
//设置编码格式
response.setCharacterEncoding(“UTF-8”);
response.setContentType(“application/json;charset=UTF-8”);

    PrintWriter pw = response.getWriter();

    if (user == null) {
        pw.write(JsonUtil.objToJson(ServerResponse.createByErrorCodeAndMessage(ResponseCode.NEED_LOGIN.getCode(), "拦截器拦截,请登录")));
    } else {
        pw.write(JsonUtil.objToJson(ServerResponse.createByErrorCodeAndMessage(ResponseCode.ERROR.getCode(), "拦截器拦截,无权限操作")));
    }

    pw.flush();
    pw.close();
    return false;
}

log.info("preHandle");
return true;

}
效果:
在这里插入图片描述
这篇文章没有写全面,其中pw.write(JsonUtil.objToJson(ServerResponse.createByErrorCodeAndMessage(ResponseCode.NEED_LOGIN.getCode(), “拦截器拦截,请登录”)));
这句代码中JsonUtil.objToJson这个方法没有给出代码。
不过文章的思路可以参考。
可以把缺失的部分代码换成下面的代码。

response.setCharacterEncoding("UTF-8");  
response.setContentType("application/json; charset=utf-8");
PrintWriter out = null ;
try{
    JSONObject res = new JSONObject();
    res.put("success","false");
    res.put("msg","xxxx");
    out = response.getWriter();
    out.append(res.toString());
    return false;
}
catch (Excepton e){
    e.printStackTrace();
    response.sendError(500);
    return false;
}

以解决上面的问题。

参考文章:
https://blog.csdn.net/qq_37585236/article/details/81781563
https://blog.csdn.net/u012201619/article/details/75156707/

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 很高兴为您讲解SpringMVCSpringMVC是一种Java框架,它可以帮助开发人员快速构建Web应用程序。它利用模型-视图-控制器(MVC)模式,将Web应用程序的核心部分分解到不同的模块,从而简化Web应用程序的开发和维护。SpringMVC提供了一种用于处理HTTP请求和响应的简单模型,并支持多种视图技术,如JSP、FreeMarker、Velocity等。此外,SpringMVC还提供了丰富的拦截器,可以拦截用户请求和Web应用程序的响应,以及可以使用Spring的依赖注入(DI)和Aspect Oriented Programming(AOP)功能,从而更快地构建Web应用程序。 ### 回答2: Spring MVC是一个基于Java的Web开发框架,它是Spring框架的一部分。Spring MVC采用了经典的Model-View-Controller(MVC)设计模式,用于开发灵活可维护的Web应用程序。 在Spring MVC,请求是通过DispatcherServlet进行处理的。DispatcherServlet是前端控制器(Front Controller),它接收并分发来自客户端的请求。DispatcherServlet将请求导向相应的处理器(Handler),处理器负责处理请求并生成相应的结果。 在Spring MVC,Controller负责处理请求。Controller可以通过注解或配置文件的方式进行配置,它提供了各种处理请求的方法。Controller接收请求后,可以获取请求的参数,调用相应的Service层组件进行业务逻辑处理,然后再返回结果给客户端。 Spring MVC还提供了强大的视图解析器(View Resolver)功能,用于将处理结果转化为具体的视图。视图层可以采用JSP、Thymeleaf、Freemarker等技术进行实现。视图解析器根据配置将逻辑视图的名称解析为具体的视图对象,最终将结果渲染到客户端。 除了请求处理和视图解析外,Spring MVC还提供了一系列的其他特性,如拦截器、数据绑定、数据验证、国际化等。这些特性可以帮助开发者更方便地实现各种Web应用的需求。 总之,Spring MVC是一个功能强大、灵活可扩展的Web开发框架,它提供了一系列的组件和特性,帮助开发者快速构建高效、易于维护的Web应用程序。 ### 回答3: Spring MVC是一种基于Java的Web框架,它是Spring框架的一部分,用于开发企业级的Web应用程序。它的主要目的是简化Web应用程序的开发,提供了一种模块化和灵活的方式来组织各个组件。 Spring MVC采用了MVC(模型-视图-控制器)的设计模式,将应用程序划分为三个主要组件: 1. 模型(Model):模型代表应用程序的业务逻辑和数据。在Spring MVC,模型可以是一个POJO(Plain Old Java Object)或者是一个带有业务逻辑的JavaBean。它负责从数据源获取数据,进行业务逻辑的处理,并将处理结果传递给视图。 2. 视图(View):视图负责展示数据给用户,并接收用户的交互请求。在Spring MVC,视图通常是一个JSP(JavaServer Pages)或者Thymeleaf模板。它利用模型的数据生成动态内容,并将生成的HTML页面返回给用户。 3. 控制器(Controller):控制器负责接收用户的请求,并根据请求的类型和参数来选择合适的业务逻辑处理方式。在Spring MVC,控制器是一个Java类,使用注解来标识请求处理方法。控制器从请求获取参数,调用模型的方法进行业务逻辑处理,然后将处理结果传递给视图。 Spring MVC提供了丰富的功能和特性,例如请求映射、数据绑定、数据验证、错误处理、国际化、文件上传等。它还支持RESTful风格的Web服务开发,可以轻松与其他技术集成,如Spring Security进行权限控制。 总的来说,Spring MVC是一个优秀的Web开发框架,它通过将应用程序分割为模型、视图和控制器,帮助开发人员实现业务逻辑的分离和模块化,提高开发效率和代码可维护性,同时提供了丰富的功能和特性来满足各种Web应用程序的需求。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值