springboot+springmvc拦截器做登录拦截

  1. LoginInterceptor 实现 HandlerInterceptor 接口,自定义拦截器处理方法

  2. LoginConfiguration 实现 WebMvcConfigurer 接口,注册拦截器

  3. ResourceBundle 加载 properties文件数据,配置不进行拦截的路径

LoginInterceptor

package com.ytkj.smart_sand.system.interceptor;

import com.alibaba.fastjson.JSONObject;
import com.ytkj.smart_sand.base.DataResponse;
import com.ytkj.smart_sand.dict.user.Dic_sysuser_sessionkey;
import com.ytkj.smart_sand.pojo.user.SysUser;
import org.springframework.web.servlet.HandlerInterceptor; import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse; /**
* @description:
* @author: changzhou.xie@yuantiaokj.com
* @date: 2019/10/21 17:04
*/
public class LoginInterceptor implements HandlerInterceptor { @Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
System.out.println("requestURI:" + request.getRequestURI());
SysUser sysUser = (SysUser) request.getSession().getAttribute(Dic_sysuser_sessionkey.CURRENT_USER);
if(sysUser == null){
DataResponse result = DataResponse.failure("0100", "用户没有登录");
response.setContentType("application/json;charset=UTF-8");
response.getWriter().write(JSONObject.toJSONString(result));
return false;
}
return true;
}
}

LoginConfiguration

package com.ytkj.smart_sand.config;

import com.ytkj.smart_sand.dict.system.Dict_decollator;
import com.ytkj.smart_sand.system.interceptor.LoginInterceptor;
import com.ytkj.smart_sand.system.properties.LoginInfoProperties;
import org.apache.commons.lang3.StringUtils;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer; /**
* @description:
* @author: changzhou.xie@yuantiaokj.com
* @date: 2019/10/21 17:11
*/
@Configuration
public class LoginConfiguration implements WebMvcConfigurer { /*
注意拦截路径的写法:
/**/*.html 表示所有的html文件。
/img/** 表示img目录下的所有文件。
*/
@Override
public void addInterceptors(InterceptorRegistry registry) {
String paths = LoginInfoProperties.getValue("loginReleasePaths");
String[] loginReleasePaths;
if(StringUtils.isNotBlank(paths)){
loginReleasePaths = paths.split(Dict_decollator.ENG_COMMA);
}else{
loginReleasePaths = new String[0];
} registry.addInterceptor(new LoginInterceptor())
.addPathPatterns("/**")//拦截路径
.excludePathPatterns(loginReleasePaths);//不进行拦截路径
} }

LoginInfoProperties

package com.ytkj.smart_sand.system.properties;

import java.util.MissingResourceException;
import java.util.ResourceBundle; /**
* @description:
* @author: changzhou.xie@yuantiaokj.com
* @date: 2019/10/21 16:59
*/
public class LoginInfoProperties {
private static final String LOGIN = "login";
private static ResourceBundle LOGIN_BUNDLE = ResourceBundle.getBundle(LOGIN); public static String getValue(String key){
try {
return LOGIN_BUNDLE.getString(key);
} catch (MissingResourceException e) {
e.printStackTrace();
}
return "";
}
}

login.properties

# main/resources/login.properties

# /**/*.html 表示所有的html文件。
# /img/** 表示img目录下的所有文件。
loginReleasePaths=/img/**,\
/**/*.html,\
/user/login/pc

ResourceBundle

是一个加载properties文件的工具类。支持国际化。从classpath中加载配置文件。

文件命名方式 baseName_国别_语言.properties

ResourceBundle bundle = ResourceBundle.getBundle("res", new Locale("zh", "CN"));

new Locale("zh", "CN")这个对象就告诉了程序你的本地化信息。如果不指定则使用系统默认的Locale。

  1. classpath下寻找res_zh_CN.properties 若不存在
  2. 那么会去找res_zh.properties,若还是不存在
  3. 则会去寻找res.properties,要还是找不到的话,那么就该抛异常了:MissingResourceException.
// login是资源文件的名称。
ResourceBundle login = ResourceBundle.getBundle("login");//不指定locale会使用系统默认的。 Exception in thread "main" java.util.MissingResourceException: Can't find bundle for base name login, locale zh_CN

springboot+springmvc拦截器做登录拦截的更多相关文章

  1. SpringMVC之拦截器实现登录验证

    今天回头看之前发的javaweb学习路线图,发现把路线图中的也学的有一半多了,不过还是路漫漫.在前面的博客中有学习过spring的aop,它利用动态代理实现,在springmvc中也是一样,今天使用H ...

  2. SpringMVC配置拦截器实现登录控制

    SpringMVC读取Cookie判断用户是否登录,对每一个action都要进行判断.之前使用jstl标签在页面上判断session如果没有登录就使用如下代码跳转到登录页面. <c:if tes ...

  3. springmvc拦截器验证登录时间

    在前一篇[Filter实现用户名验证]的随笔里,记录了如何使用filter 这次增加了拦截器实现 ①filter实现用户登陆时验证用户名是否为null ②interceptor实现用户登陆时时间判断, ...

  4. Struts2通过自己定义拦截器实现登录之后跳转到原页面

    这个功能对用户体验来说是非常重要的.实现起来事实上非常easy. 拦截器的代码例如以下: package go.derek.advice; import go.derek.entity.User; i ...

  5. Struts2透过自定义拦截器实现登录之后跳转到原页面

    Struts2通过自定义拦截器实现登录之后跳转到原页面 这个功能对用户体验来说是非常重要的.实现起来其实很简单. 拦截器的代码如下: package go.derek.advice; import g ...

  6. Vue2学习小记-给Vue2路由导航钩子和axios拦截器做个封装

    1.写在前面 最近在学习Vue2,遇到有些页面请求数据需要用户登录权限.服务器响应不符预期的问题,但是总不能每个页面都做单独处理吧,于是想到axios提供了拦截器这个好东西,再于是就出现了本文. 2. ...

  7. SSM项目使用拦截器实现登录验证功能

    SSM项目使用拦截器实现登录验证功能 登录接口实现 public User queryUser(String UserName, String Password,HttpServletRequest ...

  8. Mybatis利用拦截器做统一分页

    mybatis利用拦截器做统一分页 查询传递Page参数,或者传递继承Page的对象参数.拦截器查询记录之后,通过改造查询sql获取总记录数.赋值Page对象,返回. 示例项目:https://git ...

  9. JavaWeb -- Struts 自定义拦截器, 登录权限拦截

    1. 自定义拦截器, 登录权限拦截 login.jsp 登录JSP <%@ page language="java" contentType="text/html; ...

随机推荐

  1. Bliss OS 12.1下载 PC上Android10体验

    下载也不是一帆风顺啊 这是设计者的secret: https://forum.xda-developers.com/android/software/bliss-os-x86-pc-s-12-x-de ...

  2. CF-1208 C.Magic Grid

    题目 大意:构造一个n行n列的矩阵,使得每一行,每一列的异或和都相等,n是4的倍数. 先看4*4的矩阵,我们很容易构造出符合要求的矩阵,比如 0    1    2    3 4    5    6  ...

  3. [东西]neverOpen

    一.介绍 用于完成一项光荣而伟大的使命. 二.更新日志 当前版本:V5.0 - 20191107 --------------------------------------------------- ...

  4. 开发者必备Linux命令

    开发者必备Linux常用命令,掌握这些命令绝对够了,基于CenterOS7.6. 系统服务管理 systemctl 输出系统中各个服务的状态: systemctl list-units --type= ...

  5. Ansible 如何只输出错误信息?

    有时主机较多时,我们只想关注有问题的主机. Ansible callback 插件中有一个 actionable,官方描述为: actionable - shows only items that n ...

  6. vue自定义事件---拖拽

    margin布局拖拽 Vue.directive('drag', { bind(el, binding, vnode, oldVnode) { const dialogHeaderEl = el.qu ...

  7. 如何在 C# 中自定义 Comparer,以实现按中文拼音(a-z)来排序

    1. 为何要自定义 Comparer a. 先看如下代码 class Program { public static void Main(string[] args) { List<string ...

  8. PHP7 php_memcache.dll下载

    因为项目切换到PHP7.1的环境,而且要用到memcache,但是在pecl上却发现memcache不支持PHP7.在网上也找了很久也没有找到,基本上都是大牛自己编译的dll,和自己的版本不合适. 结 ...

  9. 【UOJ#308】【UNR#2】UOJ拯救计划

    [UOJ#308][UNR#2]UOJ拯救计划 题面 UOJ 题解 如果模数很奇怪,我们可以插值一下,设\(f[i]\)表示用了\(i\)种颜色的方案数. 然而模\(6\)这个东西很有意思,\(6=2 ...

  10. ASP.NET Core快速入门(第3章:依赖注入)--学习笔记

    课程链接:http://video.jessetalk.cn/course/explore 良心课程,大家一起来学习哈! 任务16:介绍 1.依赖注入概念详解 从UML和软件建模来理解 从单元测试来理 ...