SpringBoot 拦截器--只允许进入登录注册页面,没登录不允许查看其它页面
SpringBoot注册登录(三):注册--验证账号密码是否符合格式及后台完成注册功能点击打开链接
SpringBoot注册登录(四):登录功能--密码错误三次,需要等待2分钟才能登录,固定时间内不能登录点击打开链接
SpringBoot注册登录(五):登录功能--Scheduling Tasks定时作业,用于某个时间段允许/不允许用户登录点击打开链接
SpringBoot--mybatis--ajax--模态框--log:注册、登录、拦截器、文件系统源代码点击打开链接
直接运行程序,就会加载拦截器了。这个拦截器在没登录前只会放行登录注册、验证码的请求
一、先在启动类加上注解(如果使用了下面步骤的代码程序执行失败的话)
- @ComponentScan
- @EnableAutoConfiguration
- @EnableScheduling
- @Configuration
@ComponentScan
@EnableAutoConfiguration
@EnableScheduling
@Configuration
二、定义两个类
1、LoginInterceptor
- package com.fxy.interceptor;
- import com.fxy.bean.User;
- import com.fxy.service.UserService;
- import org.apache.log4j.Logger;
- import org.springframework.beans.factory.annotation.Autowired;
- import org.springframework.beans.factory.annotation.Value;
- import org.springframework.stereotype.Component;
- import org.springframework.stereotype.Controller;
- import org.springframework.web.servlet.handler.HandlerInterceptorAdapter;
- import javax.servlet.http.HttpServletRequest;
- import javax.servlet.http.HttpServletResponse;
- import javax.servlet.http.HttpSession;
- import java.util.ArrayList;
- import java.util.HashSet;
- import java.util.List;
- import java.util.Set;
- /**
- * 登录验证拦截
- *
- */
- @Controller
- @Component
- public class LoginInterceptor extends HandlerInterceptorAdapter {
- Logger log = Logger.getLogger(LoginInterceptor.class);
- /*@Autowired
- UserService userService;*/
- /*@Value("${IGNORE_LOGIN}")
- Boolean IGNORE_LOGIN;*/
- @Override
- public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler)
- throws Exception {
- String basePath = request.getContextPath();
- String path = request.getRequestURI();
- // log.info("basePath:"+basePath);
- // log.info("path:"+path);
- if(!doLoginInterceptor(path, basePath) ){//是否进行登陆拦截
- return true;
- }
- // HttpSession session = request.getSession();
- // int userID = 2;
- // UserInfo userInfo = sysUserService.getUserInfoByUserID(userID);
- // System.out.println(JsonUtil.toJson(userInfo));
- // session.setAttribute(Constants.SessionKey.USER, userInfo);
- //如果登录了,会把用户信息存进session
- HttpSession session = request.getSession();
- List<User> users = (List<User>) session.getAttribute("userList");
- /*User userInfo = new User();
- userInfo.setId(users.get(0).getId());
- userInfo.setName(users.get(0).getName());
- userInfo.setPassword(users.get(0).getPassword());*/
- //开发环节的设置,不登录的情况下自动登录
- /*if(userInfo==null && IGNORE_LOGIN){
- userInfo = sysUserService.getUserInfoByUserID(2);
- session.setAttribute(Constants.SessionKey.USER, userInfo);
- }*/
- if(users==null){
- /*log.info("尚未登录,跳转到登录界面");
- response.sendRedirect(request.getContextPath()+"signin");*/
- String requestType = request.getHeader("X-Requested-With");
- // System.out.println(requestType);
- if(requestType!=null && requestType.equals("XMLHttpRequest")){
- response.setHeader("sessionstatus","timeout");
- // response.setHeader("basePath",request.getContextPath());
- response.getWriter().print("LoginTimeout");
- return false;
- } else {
- log.info("尚未登录,跳转到登录界面");
- response.sendRedirect(request.getContextPath()+"signin");
- }
- return false;
- }
- // log.info("用户已登录,userName:"+userInfo.getSysUser().getUserName());
- return true;
- }
- /**
- * 是否进行登陆过滤
- * @param path
- * @param basePath
- * @return
- */
- private boolean doLoginInterceptor(String path,String basePath){
- path = path.substring(basePath.length());
- Set<String> notLoginPaths = new HashSet<>();
- //设置不进行登录拦截的路径:登录注册和验证码
- //notLoginPaths.add("/");
- notLoginPaths.add("/index");
- notLoginPaths.add("/signin");
- notLoginPaths.add("/login");
- notLoginPaths.add("/register");
- notLoginPaths.add("/kaptcha.jpg");
- notLoginPaths.add("/kaptcha");
- //notLoginPaths.add("/sys/logout");
- //notLoginPaths.add("/loginTimeout");
- if(notLoginPaths.contains(path)) return false;
- return true;
- }
- }
package com.fxy.interceptor; import com.fxy.bean.User;
import com.fxy.service.UserService; import org.apache.log4j.Logger;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;
import org.springframework.stereotype.Controller;
import org.springframework.web.servlet.handler.HandlerInterceptorAdapter; import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession; import java.util.ArrayList;
import java.util.HashSet;
import java.util.List;
import java.util.Set; /**
- 登录验证拦截
@Controller
@Component
public class LoginInterceptor extends HandlerInterceptorAdapter {
Logger log = Logger.getLogger(LoginInterceptor.class);
/*@Autowired
UserService userService;*/
/*@Value("${IGNORE_LOGIN}")
Boolean IGNORE_LOGIN;*/
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler)
throws Exception {
String basePath = request.getContextPath();
String path = request.getRequestURI();
// log.info("basePath:"+basePath);
// log.info("path:"+path);
if(!doLoginInterceptor(path, basePath) ){//是否进行登陆拦截
return true;
}
// HttpSession session = request.getSession();
// int userID = 2;
// UserInfo userInfo = sysUserService.getUserInfoByUserID(userID);
// System.out.println(JsonUtil.toJson(userInfo));
// session.setAttribute(Constants.SessionKey.USER, userInfo);
//如果登录了,会把用户信息存进session
HttpSession session = request.getSession();
List<User> users = (List<User>) session.getAttribute("userList");
/*User userInfo = new User();
userInfo.setId(users.get(0).getId());
userInfo.setName(users.get(0).getName());
userInfo.setPassword(users.get(0).getPassword());*/
//开发环节的设置,不登录的情况下自动登录
/*if(userInfo==null && IGNORE_LOGIN){
userInfo = sysUserService.getUserInfoByUserID(2);
session.setAttribute(Constants.SessionKey.USER, userInfo);
}*/
if(users==null){
/*log.info("尚未登录,跳转到登录界面");
response.sendRedirect(request.getContextPath()+"signin");*/
String requestType = request.getHeader("X-Requested-With");
// System.out.println(requestType);
if(requestType!=null && requestType.equals("XMLHttpRequest")){
response.setHeader("sessionstatus","timeout");
// response.setHeader("basePath",request.getContextPath());
response.getWriter().print("LoginTimeout");
return false;
} else {
log.info("尚未登录,跳转到登录界面");
response.sendRedirect(request.getContextPath()+"signin");
}
return false;
}
// log.info("用户已登录,userName:"+userInfo.getSysUser().getUserName());
return true;
}
/**
* 是否进行登陆过滤
* @param path
* @param basePath
* @return
*/
private boolean doLoginInterceptor(String path,String basePath){
path = path.substring(basePath.length());
Set<String> notLoginPaths = new HashSet<>();
//设置不进行登录拦截的路径:登录注册和验证码
//notLoginPaths.add("/");
notLoginPaths.add("/index");
notLoginPaths.add("/signin");
notLoginPaths.add("/login");
notLoginPaths.add("/register");
notLoginPaths.add("/kaptcha.jpg");
notLoginPaths.add("/kaptcha");
//notLoginPaths.add("/sys/logout");
//notLoginPaths.add("/loginTimeout");
if(notLoginPaths.contains(path)) return false;
return true;
}
}
2、WebConfig
- package com.fxy.interceptor;
- import org.springframework.beans.factory.annotation.Autowired;
- import org.springframework.context.annotation.Bean;
- import org.springframework.context.annotation.Configuration;
- import org.springframework.web.servlet.config.annotation.DefaultServletHandlerConfigurer;
- import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
- import org.springframework.web.servlet.config.annotation.ViewControllerRegistry;
- import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter;
- import org.springframework.web.servlet.view.InternalResourceViewResolver;
- import org.springframework.web.servlet.view.JstlView;
- @Configuration
- public class WebConfig extends WebMvcConfigurerAdapter {
- //@Autowired
- //LogInterceptor logInterceptor;
- @Autowired
- LoginInterceptor loginInterceptor;
- /
- 不需要登录拦截的url:登录注册和验证码
- /
- final String[] notLoginInterceptPaths = {"/signin","/login/","/index/","/register/","/kaptcha.jpg/","/kaptcha/"};//"/", "/login/", "/person/", "/register/", "/validcode", "/captchaCheck", "/file/", "/contract/htmltopdf", "/questions/", "/payLog/", "/error/" };
- @Override
- public void addInterceptors(InterceptorRegistry registry) {
- // 日志拦截器
- //registry.addInterceptor(logInterceptor).addPathPatterns("/");
- // 登录拦截器
- registry.addInterceptor(loginInterceptor).addPathPatterns("/**").excludePathPatterns(notLoginInterceptPaths);
- }
- @Override
- public void configureDefaultServletHandling(DefaultServletHandlerConfigurer configurer) {
- configurer.enable();
- }
- @Bean
- public InternalResourceViewResolver viewResolver() {
- InternalResourceViewResolver resolver = new InternalResourceViewResolver();
- resolver.setPrefix("/templates/");
- resolver.setSuffix(".html");
- resolver.setViewClass(JstlView.class);
- return resolver;
- }
- @Override
- public void addViewControllers(ViewControllerRegistry registry) {
- }
- }
package com.fxy.interceptor; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.DefaultServletHandlerConfigurer;
import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
import org.springframework.web.servlet.config.annotation.ViewControllerRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter;
import org.springframework.web.servlet.view.InternalResourceViewResolver;
import org.springframework.web.servlet.view.JstlView; @Configuration
public class WebConfig extends WebMvcConfigurerAdapter {//@Autowired
//LogInterceptor logInterceptor; @Autowired
LoginInterceptor loginInterceptor; /**
* 不需要登录拦截的url:登录注册和验证码
*/
final String[] notLoginInterceptPaths = {"/signin","/login/**","/index/**","/register/**","/kaptcha.jpg/**","/kaptcha/**"};//"/", "/login/**", "/person/**", "/register/**", "/validcode", "/captchaCheck", "/file/**", "/contract/htmltopdf", "/questions/**", "/payLog/**", "/error/**" }; @Override
public void addInterceptors(InterceptorRegistry registry) {
// 日志拦截器
//registry.addInterceptor(logInterceptor).addPathPatterns("/**");
// 登录拦截器
registry.addInterceptor(loginInterceptor).addPathPatterns("/**").excludePathPatterns(notLoginInterceptPaths);
} @Override
public void configureDefaultServletHandling(DefaultServletHandlerConfigurer configurer) {
configurer.enable();
} @Bean
public InternalResourceViewResolver viewResolver() {
InternalResourceViewResolver resolver = new InternalResourceViewResolver();
resolver.setPrefix("/templates/");
resolver.setSuffix(".html");
resolver.setViewClass(JstlView.class);
return resolver;
} @Override
public void addViewControllers(ViewControllerRegistry registry) { }
}
SpringBoot 拦截器--只允许进入登录注册页面,没登录不允许查看其它页面的更多相关文章
- Java结合SpringBoot拦截器实现简单的登录认证模块
Java结合SpringBoot拦截器实现简单的登录认证模块 之前在做项目时需要实现一个简单的登录认证的功能,就寻思着使用Spring Boot的拦截器来实现,在此记录一下我的整个实现过程,源码见文章 ...
- Springboot 拦截器配置(登录拦截)
Springboot 拦截器配置(登录拦截) 注意这里环境为springboot为2.1版本 1.编写拦截器实现类,实现接口 HandlerInterceptor, 重写里面需要的三个比较常用的方 ...
- 【SpringBoot】SpringBoot拦截器实战和 Servlet3.0自定义Filter、Listener
=================6.SpringBoot拦截器实战和 Servlet3.0自定义Filter.Listener ============ 1.深入SpringBoot2.x过滤器Fi ...
- springboot拦截器HandlerInterceptor详解
Web开发中,我们除了使用 Filter 来过滤请web求外,还可以使用Spring提供的HandlerInterceptor(拦截器). HandlerInterceptor 的功能跟过滤器类似,但 ...
- SpringBoot 拦截器 && 拦截之后返回前台自定义格式
1.加入 阿里的 json jar包 <!--json jar相关jar包--> <dependency> <groupId>com.fasterxml.jacks ...
- SpringBoot拦截器中Bean无法注入(转)
问题 这两天遇到SpringBoot拦截器中Bean无法注入问题.下面介绍我的思考过程和解决过程: 1.由于其他bean在service,controller层注入一点问题也没有,开始根本没意识到Be ...
- SpringBoot拦截器中无法注入bean的解决方法
SpringBoot拦截器中无法注入bean的解决方法 在使用springboot的拦截器时,有时候希望在拦截器中注入bean方便使用 但是如果直接注入会发现无法注入而报空指针异常 解决方法: 在注册 ...
- Springboot拦截器未起作用
之前遇到要使用springboot拦截器却始终未生效的状况,查了网上的博客,大抵都是@Component,@Configuration注解未加,或是使用@ComponentScan增加包扫描,但是尝试 ...
- SpringBoot拦截器中service或者redis注入为空的问题
原文:https://my.oschina.net/u/1790105/blog/1490098 这两天遇到SpringBoot拦截器中Bean无法注入问题.下面介绍我的思考过程和解决过程: 1.由于 ...
随机推荐
- ionic之AngularJS扩展动态组件
目录: 1. 模态对话框 : $ionicModal 2. 上拉菜单 : $ionicActionSheet 3. 弹出框 : $ionicPopup 4. 浮动框 : $ionicPopover 5 ...
- 解决phpmyadmin数据文件导入有限制的问题(只能导入2M以下)
修改配置php.ini文件中三个参数: 1.upload_max_filesize 2.memory_limit 3.post_max_size 建议根据实际需要进行设置.
- linux下jdk环境变量配置深度分析----解决环境变量不生效的问题
1.linux下jdk环境变量配置 是否需要配置环境变量,主要看java -version 显示的版本是否为你期望的版本 1.1 不需要配置环境变量的情况 使用java -version查看,版本显示 ...
- [NOI2003]Editor
Description 很久很久以前,DOS3.x的程序员们开始对 EDLINEDLIN 感到厌倦. 于是,人们开始纷纷改用自己写的文本编辑器?? 多年之后,出于偶然的机会,小明找到了当时的一个编辑软 ...
- kafka的topic命名技巧
不多说,直接上干货! 比如,我们给kafka的topic命名为user_r2p10 表示user这个topic的副本因子(r)是2,分区数(p)是10. 这样后期在写消费者代码的时候,根据top ...
- 上传txt文件编码格式判断(文本乱码解决方法)
说明 通过ajax或者浏览上传文本文件,上传时候c#处理时候因为文本格式的创建不同,在获取内容时候会出现中文乱码. 解决方法 通过上传的文件流,判断文件的编码格式,在使用对应的编码格式获取文本内容 # ...
- Spring: (一) -- 春雨润物之 核心IOC
作为一个Java人,想必都或多或少的了解过Spring.对于其优势也能道个一二,诸如方便解耦.支持AOP编程.支持声明式事务.方便测试等等.Spring也不仅仅局限于服务器端开发,它可以做非常多的事情 ...
- leetcode343 Integer Break
思路: 将n不断拆分3出来直至其小于或等于4. 实现: class Solution { public: int integerBreak(int n) { ] = {, , , }; ) retur ...
- 鼠标拖拽移动Java界面组件
默认的,Frame或者JFrame自身已经实现了鼠标拖拽标题栏移动窗口的功能. 只是,当你不满意java的JFrame样式,隐藏了标题栏和边框,又或者干脆直接使用JWindow,那你又该怎么实现鼠标拖 ...
- react Native环境 搭建
react Native的优点:跨平台 低投入高回报 性能高 支持动态更新.一才两用(ios和Android) 开发成本第 代码复用率高.windows环境搭建react Native开发环境1.安装 ...