转自:https://blog.csdn.net/qq_26555463/article/details/78296103

如果是一个后台的管理项目的,有些东西是不能直接就可以访问的,必须要登录才可以进去,所以就需要进行登录拦截,只有登录过的用户才可以正常访问. 
登录拦截是不会拦截jsp页面的方法,所以我们需要在Controller写方法进行页面的调用,而且需要把jsp页面从webapp文件夹下放到WEB-INF下面,因为webapp下的文件是可以直接访问到的:文件目录 

首先创建一个WebConfig.class文件,进行拦截器的创建,拦截器需要实现WebMvcConfigurerAdapter类,继承ApplicationContextAware类, 
代码如下:

package com;

import org.springframework.beans.BeansException;
import org.springframework.context.ApplicationContext;
import org.springframework.context.ApplicationContextAware;
import org.springframework.context.annotation.Configuration;
import org.springframework.util.ResourceUtils;
import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter; import com.interceptor.LoginInterceptor; @Configuration
public class WebConfig extends WebMvcConfigurerAdapter implements ApplicationContextAware { private ApplicationContext applicationContext; public WebConfig(){
super();
} @Override
public void addResourceHandlers(ResourceHandlerRegistry registry) {
System.out.println("1");
registry.addResourceHandler("/static/**").addResourceLocations(ResourceUtils.CLASSPATH_URL_PREFIX+"/static/");
registry.addResourceHandler("/templates/**").addResourceLocations(ResourceUtils.CLASSPATH_URL_PREFIX+"/templates/"); super.addResourceHandlers(registry);
} @Override
public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {
System.out.println("11");
this.applicationContext = applicationContext;
}
@Override
public void addInterceptors(InterceptorRegistry registry) {
System.out.println("111");
//拦截规则:除了login,其他都拦截判断
registry.addInterceptor(new LoginInterceptor()).addPathPatterns("/**").excludePathPatterns("/user/login","/user/gologin");
super.addInterceptors(registry);
} }

上面的文件除了/user/login(登录信息验证方法),/user/gologin(返回登录页面方法)这两个方法不拦截,别的都拦截判断

然后编写自定义的验证规则,判断拦截到的请求是否通过

package com.interceptor;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession; import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.web.servlet.HandlerInterceptor;
import org.springframework.web.servlet.ModelAndView; public class LoginInterceptor implements HandlerInterceptor { private static final Logger log = LoggerFactory.getLogger(LoginInterceptor.class); @Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler)
throws Exception {
// TODO Auto-generated method stub
log.info("------preHandle------");
// 获取session
HttpSession session = request.getSession(true);
// 判断用户ID是否存在,不存在就跳转到登录界面
if (session.getAttribute("userId") == null) {
log.info("------:跳转到login页面!");
System.out.println(request.getContextPath() + "/login");
response.sendRedirect("/user/gologin");
return false;
} else {
return true;
}
} @Override
public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler,
ModelAndView modelAndView) throws Exception {
// TODO Auto-generated method stub
} @Override
public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex)
throws Exception {
// TODO Auto-generated method stub
} }

当用户登录成功,将用户的信息存到session中,之后的访问,就会去session中判断有没有用户信息,如果没有用户信息,则跳转到登录页面,进行用户登录

最新文章

  1. chm转换为html
  2. XCode属性面板使用说明
  3. ACM 位运算
  4. window安装mysql5.7解压版(解决乱码问题)
  5. 在注册表中查看Windows10系统激活密钥的方法
  6. springmvc拦截器的简单了解
  7. ProxySQL实现Mysql读写分离 - 部署手册
  8. 如何将数据库引擎配置为侦听多个 TCP 端口
  9. Android5.0新控件RecyclerVIew的介绍和兼容使用的方法
  10. loadrunner文本检查点
  11. Django准备知识-web应用、http协议、web框架、Django简介
  12. SpringBoot中AOP的配置
  13. Java多线程,线程交替执行
  14. 关于keyCode, 键盘代码。 和零散的javascript知识。http://js2.coffee/(转化工具)
  15. L187 DKK2
  16. 一步一步学习大数据:Hadoop 生态系统与场景
  17. Python画一朵花
  18. App审核被拒(后台定位被拒,ipv6被拒,广告标示被拒的解决方案)
  19. vue-cli+ webpack 搭建项目todolist
  20. linux备忘录-日志档案

热门文章

  1. CSS——行高
  2. C# GridView使用方法
  3. [Windows Server 2008] 安装PHP+MySQL方法
  4. 从ABC到流利口语-unit01
  5. 《LeetCode-0004》 寻找两个有序数组的中位数-Median of Two Sorted Arrays
  6. LeetCode--不同路径
  7. javaWEB中web.xml配置文件相关
  8. models中,对于(Small)IntegerField类型字段的choices参数在前端的展示
  9. =、==、is、id(内容)
  10. 小白神器 - 一篇博客学会CSS