handlerexceptionresolver 返回json

编程教程 > WEB > JavaScript (1654) 2025-01-27 09:49:08
package net.xqlee.security.interceptor;

import java.util.HashMap;
import java.util.Map;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.security.access.AccessDeniedException;
import org.springframework.security.authentication.AuthenticationCredentialsNotFoundException;
import org.springframework.security.core.context.SecurityContextHolder;
import org.springframework.stereotype.Component;
import org.springframework.web.servlet.HandlerExceptionResolver;
import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.servlet.view.json.MappingJackson2JsonView;

@Component
public class SecurityHandlerExceptionResolver implements HandlerExceptionResolver {
	private static Logger logger = LoggerFactory.getLogger(SecurityHandlerExceptionResolver.class);

	private static String data = "data";
	private static String code = "code";
	private static String msg = "msg";
	private static String date = "date";

	@Override
	public ModelAndView resolveException(HttpServletRequest request, HttpServletResponse response, Object handler,
			Exception exception) {
		// 未登陆异常捕获
		// 返回错误信息
		Map<String, Object> resultMap = new HashMap<>();
		if (exception instanceof AuthenticationCredentialsNotFoundException) {
			logger.info("User Not Login:" + request.getRequestURL());
			resultMap.put(code, "00001");
			resultMap.put(msg, "用户未登录");
			resultMap.put(data, "");
		} else if (exception instanceof AccessDeniedException) {
			logger.info("Access Denied [ID:" + SecurityContextHolder.getContext().getAuthentication().getName() + "]:"
					+ request.getRequestURL());
			resultMap.put(code, "00001");
			resultMap.put(msg, "用户权限不够");
			resultMap.put(data, "");
		}
        //这里是核心,用jsonview方式返回
		MappingJackson2JsonView jackson2JsonView = new MappingJackson2JsonView();
		//设置返回的json  map
        jackson2JsonView.setAttributesMap(resultMap);
		ModelAndView view = new ModelAndView();
		view.setView(jackson2JsonView);
		return view;
	}

}



返回信息:

{
    "msg": "用户未登录",
    "data": "",
    "code": "00001"
}

 


评论
User Image
提示:请评论与当前内容相关的回复,广告、推广或无关内容将被删除。

相关文章
Java编程之Spring Boot中使用jsp视图模板
handlerexceptionresolver 返回json
Java EE 8 JSON Pointer讲解,Java EE 8包含JSON处理API的更新,并为最新的JSON标准提供最新的IEFT标准。
引言AES代表高级加密系统,它是一种对称加密算法
学习创建和配置使用JSP 模板文件渲染视图层的Spring Boot jsp 视图解析器
java json字符串转对象_json转换为java对象_ json字符串转对象数组
spring boot 开发技巧,在开发web项目中跳过thyemeleaf模板/js/css等缓存避免每次修改资源文件都需要重启服务器
java编程中使用nodejs的apidoc工具生成Java api美观的HTML文档,apidoc可以根据代码注释生成web api文档,支持大部分主流语言
简介Spring Cloud Gateway中的全局异常处理不能直接用@ControllerAdvice来处理,通过跟踪异常信息的抛出,找到对应的源码,自定义一些处理逻辑来符合业务的需求
Spring Boot 2.0 @JsonFormat(pattern = "yyyy-MM-dd",timezone = "GMT+8") 注解格式化日期失效原因及解决。
fastJSON字符串类型数据中的日期转换为Java bean的日期对象
一、项目环境Spring Boot 2.1.2.RELEASEshiro-spring 1.4二、去掉URL jsessionid在shiro配置中,配置关闭url中显示sessionId ...
Java生成密钥对采用hutool工具生KeyPair keyPair = SecureUtil.generateKeyPair("RSA"); PrivateKey aPrivate = k...
前言值得一提的是JSON只有数组数据类型
jsp中/el表达式中将后台传来的时间戳格式化为年月日时分秒1.引入相关标签库&lt;%@taglib prefix="c" uri="http://java.sun