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. 【day08】PHP

    一. 函数 1.函数:封装的,可以重复使用的完成特定功能的代码段. 2.函数分类:   (1)系统函数   (2)自定义函数 3.自定义函数   (1)格式   function 函数名称([参数[= ...

  2. MySQL中的存储过程、函数与触发器

    一.对待存储过程和函数的态度 优点: 1.存储过程只在创建时进行编译,sql语句则每次执行都需要编译.能提高数据库执行速度. 2.简单复杂操作结合事物一起封装. 3.复用性高. 4.安全性高,可指定存 ...

  3. Python连载41-yield from详解、委派生成器

    一. 1.yield from (1)调用协程为了得到返回值,协程必须正常终止 (2)生成器正常终止会发出StopIteration异常,异常对象的value属性保存返回值. (3)yield fro ...

  4. JDBC的安装与使用

    JDBC的安装 首先在登录MySQL的官网下载JDBC-MySQL数据库驱动,或者去www.mysql.com/products/connector直接下载. 因为jdbc包属于第三方包,因此要自己导 ...

  5. linux (centos)增删改查用户命令

    1,查看用户 cat /etc/passwd 2,删除用户 userdel 用户名 3,查看组 cat /etc/group 4,删除组 groupdel 组名 5.查看系统中有哪些用户: cut - ...

  6. 通过Filebeat把日志传入到Elasticsearch

    学习的地方:配置文件中预先处理字段数据的用法 通过Filebeat把日志传入到Elasticsearch Elastic Stack被称之为ELK (Elasticsearch,Logstash an ...

  7. 阿里云(百度云)Linux系统挂载磁盘

    阿里云(百度云)Linux系统挂载磁盘

  8. ELK学习笔记之Elasticsearch和Kibana数据导出实战

    0x00 问题引出 以下两个导出问题来自Elastic中文社区. 问题1.kibana怎么导出查询数据?问题2:elasticsearch数据导出就像数据库数据导出一样,elasticsearch可以 ...

  9. 【C#夯实】我与接口二三事:IEnumerable、IQueryable 与 LINQ

    序 学生时期,有过小组作业,当时分工一人做那么两三个页面,然而在前端差不多的时候,我和另一个同学发生了争执.当时用的是简单的三层架构(DLL.BLL.UI),我个人觉得各写各的吧,到时候合并,而他觉得 ...

  10. scrapy学习笔记(二)框架结构工作原理

    scrapy结构图: scrapy组件: ENGINE:引擎,框架的核心,其它所有组件在其控制下协同工作. SCHEDULER:调度器,负责对SPIDER提交的下载请求进行调度. DOWNLOADER ...