webmvc配置类:

@Configuration
public class WebMvcConfig extends WebMvcConfigurationSupport{@Overrideprotected void addInterceptors(InterceptorRegistry registry) {registry.addInterceptor(new LoginInterceptor()).addPathPatterns("/**").excludePathPatterns("/user/login");}
}

注:registry.addInterceptor(拦截器类对象).addPathPatterns("需要拦截的请求路径").excludePathPatterns("可以放行的请求路径");

拦截器类,这里为登录拦截

public class LoginInterceptor implements HandlerInterceptor{@Overridepublic void afterCompletion(HttpServletRequest arg0, HttpServletResponse arg1, Object arg2, Exception arg3)throws Exception {// TODO Auto-generated method stub
        }@Overridepublic void postHandle(HttpServletRequest arg0, HttpServletResponse arg1, Object arg2, ModelAndView arg3)throws Exception {// TODO Auto-generated method stub
        }@Overridepublic boolean preHandle(HttpServletRequest hServletRequest, HttpServletResponse hServletResponse, Object object) throws Exception {// 案例采用session存储登录用户,所以从session获取登录用户     HttpSession session = hServletRequest.getSession();TUser tUser=(TUser)session.getAttribute("user");        // 判断session里是否能取出用户if(tUser==null) {returnErrorMessage(hServletResponse, "当前操作需要先进行用户登录");return false;}return true;}private void returnErrorMessage(HttpServletResponse response, String errorMessage) throws IOException {response.setCharacterEncoding("utf-8");Map<String, Object> var=new HashMap<>();var.put("success", false);var.put("errorMessage", errorMessage);response.setContentType("application/json");PrintWriter out = response.getWriter();ObjectMapper mapper = new ObjectMapper();String jsonOfRST =mapper.writeValueAsString(var);out.print(jsonOfRST);out.flush();}
}

到这里实现了简单的登录拦截,但是上面通过response对象获取的输出流来写入错误信息,下面采用自定义异常来处理

异常类

public class UnloggedException extends RuntimeException{private static final long serialVersionUID = 181074719716690931L;public UnloggedException() {super("当前操作需要先进行登录");}
}

修改拦截器类的preHandle方法,于是returnErrorMessage方法可以去掉了

@Overridepublic boolean preHandle(HttpServletRequest hServletRequest, HttpServletResponse hServletResponse, Object object) throws Exception {HttpSession session = hServletRequest.getSession();TUser tUser=(TUser)session.getAttribute("user");if(tUser==null) {throw new UnloggedException();}return true;}

最后配置异常处理类

@ControllerAdvice
@ResponseBody
public class GlobalExceptionHandler {@ExceptionHandlerpublic JSONObject handleException(Exception e) {return ActionHelper.responseFailed(e.getMessage());}
}

上面的返回值及ActionHelper为我使用的返回工具类,依赖为com.alibaba的fastjson,版本参考1.2.49。

可以根据实际情况修改返回方式及返回值。

此后所有的异常,都可以通过自定义异常的方式,交由异常处理类来进行处理,返回结果。

转载于:https://www.cnblogs.com/it-taosir/p/9716028.html

简单的实现登录拦截及统一异常处理(自定义异常)相关推荐

  1. 程序猿修仙之路--数据结构之你是否真的懂数组? c#socket TCP同步网络通信 用lambda表达式树替代反射 ASP.NET MVC如何做一个简单的非法登录拦截...

    程序猿修仙之路--数据结构之你是否真的懂数组? 数据结构 但凡IT江湖侠士,算法与数据结构为必修之课.早有前辈已经明确指出:程序=算法+数据结构  .要想在之后的江湖历练中通关,数据结构必不可少.数据 ...

  2. SpringMVC自定义拦截器与异常处理(自定义异常)

    SpringMVC自定义拦截器与异常处理 拦截器概念 拦截器代码演示 创建maven工程 pom.xml <?xml version="1.0" encoding=" ...

  3. 面试宝典三 --学科管理模块(拦截器,token,统一异常处理)

    面试宝典 需求分析 涉及到的表,实体类,页面 学科管理页面跳转 新增学科 分析 前端统一设置拦截器 后台登录拦截配置 统一异常处理 RequestException: 前端新增学科 后端逻辑 Cour ...

  4. Spring Boot 统一功能处理(用户登录权限效验-拦截器、异常处理、数据格式返回)

    文章目录 1. 统一用户登录权限效验 1.1 最初用户登录权限效验 1.2 Spring AOP 统一用户登录验证 1.3 Spring 拦截器 1.4 练习:登录拦截器 1.5 拦截器实现原理 1. ...

  5. Spring Boot统一异常处理的拦截指南

    通常我们在Spring Boot中设置的统一异常处理只能处理Controller抛出的异常.有些请求还没到Controller就出异常了,而这些异常不能被统一异常捕获,例如Servlet容器的某些异常 ...

  6. 统一登录验证统一返回格式统一异常处理的实现

    统一登录验证&统一返回格式&统一异常处理的实现 一.用户登录权限效验 1.1 最初的用户登录验证 1.2 Spring AOP 用户统一登录验证的问题 1.3 Spring 拦截器 1 ...

  7. 简单实现vue中的登录拦截

    本文主要讲述如何在vue中使用路由判断简单实现登陆的的拦截. 如何实现 首先在定义路由的时候就需要多添加一个自定义字段requireAuth,用于判断该路由的访问是否需要登录.如果用户已经登录,则顺利 ...

  8. 教你玩转 统一异常处理

    点击上方蓝色"方志朋",选择"设为星标" 回复"666"获取独家整理的学习资料! 作者:Cs_hnu_scw blog.csdn.net/C ...

  9. SpringMVC之拦截器和异常处理

    第四章 拦截器和异常处理 回顾 课前测: 本章内容 拦截器 异常处理 第一节:拦截器 javaWeb: 三大组件为servlet.filter .listener filter: 1.filter接口 ...

最新文章

  1. 西安翻译学院计算机分数线,西安翻译学院录取投档线
  2. CentOS6.2解决passwd: Authentication token manipulation error报错
  3. flex的mxmlc命令行编译as3文件成swf
  4. 郑州计算机技校哪个学校好,郑州十大技校排名 详细介绍
  5. 梯度方向直方图和物体检测Histogram of Oriented Gradients and Object Detection
  6. HotSpot 自动内存管理笔记与实战
  7. 报名丨“眼界大开 声临其境”网易首届音视频技术大会倒计时!
  8. 石头剪刀布程序流程图_石头剪刀布!我要与电脑决战到天明!(14天)
  9. Java虚拟机(JVM)概念简介
  10. C++头文件重复定义问题的处理(不会看看,会了防身!)
  11. Unique Email Addresses
  12. python加载dll后如何查看函数_Python调用DLL带指针函数读写IC卡
  13. Android Studio ADB 环境变量配置
  14. 【整理】1、C网和G网双模手机是否可同时支持C网和G网上网?2、上网的同时是否可以打电话?3、呼叫等待和呼叫保持的概念与“双通”手机
  15. 如何解决地图已加载却不能渲染的问题?
  16. 18650圆柱锂电池comsol5.6模型 参数已配置,电化学生热研究,三种放电倍率
  17. FillRect and GradientFill
  18. java怎么快速补缺_Java基础查漏补缺(1)
  19. Zynq-7000系列之linux开发学习笔记:编译Linux内核和制作设备树(六)
  20. 2022第十三届蓝桥杯国赛真题javaB组

热门文章

  1. 我去德国出差后学习的一些德语
  2. 新建一个文件夹服务器,云服务器中新建文件夹命令
  3. 龙卷风优化软件测试面试题,暑X好物大推荐,最强真无线降噪耳机带你开启夏日解压模式...
  4. 【linux】服务器运维必备之linux常用命令合集
  5. 2014年职称计算机word2003,2014年职称计算机考试Word2003模拟题及答案5
  6. 主进程退出后子进程还会存在吗?_【干货】Linux进程模型 全解
  7. 字母异位词分组Python解法
  8. mysql数据库的分离_数据库分离和附加 (SQL Server)
  9. 浏览器打开php显示空白,pc微信浏览器打开页面显示空白,其他浏览器正常
  10. 如何查询2021广东高考英语成绩,2021广东英语听说考试成绩查询方法 什么时候查成绩...