Spring boot之登录拦截器
来源:互联网 发布:药品查询软件 编辑:程序博客网 时间:2024/06/08 04:30
首先,继承一个拦截器:
package com.cy.example.filter;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 Logger logger = LoggerFactory.getLogger(LoginInterceptor.class); public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception { // TODO Auto-generated method stub } public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception { // TODO Auto-generated method stub } public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception { // TODO Auto-generated method stub //获取session HttpSession session = request.getSession(true); //判断用户ID是否存在,不存在就跳转到登录界面 /*String url = request.getServletPath(); logger.info("----进入拦截器--url:"+url+"-----"); if(url.contains("/system/user/validate")){ logger.info("----放过/system/user/validate-----"); return true; }*/ if(session.getAttribute(WebConfig.LOGIN_USER) == null){ logger.info("------跳转到login页面-----"); response.sendRedirect(request.getContextPath()+"/index"); return false; }else{ session.setAttribute(WebConfig.LOGIN_USER, session.getAttribute(WebConfig.LOGIN_USER)); return true; } }}
在preHandle方法中获取缓存中的用户名,如果没有则返回登录界面,如果有则通过拦截器。下面就把新写的拦截器注册一下:
package com.cy.example.filter;import org.springframework.context.annotation.ComponentScan;import org.springframework.context.annotation.Configuration;import org.springframework.web.servlet.config.annotation.DefaultServletHandlerConfigurer;import org.springframework.web.servlet.config.annotation.EnableWebMvc;import org.springframework.web.servlet.config.annotation.InterceptorRegistry;import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry;import org.springframework.web.servlet.config.annotation.ViewControllerRegistry;import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter;import com.cy.example.Application;@Configurationpublic class WebConfig extends WebMvcConfigurerAdapter{ public static String LOGIN_USER = "loginUser"; public WebConfig(){ super(); } @Override public void addResourceHandlers(ResourceHandlerRegistry registry) { registry.addResourceHandler("/static/**").addResourceLocations("classpath:/static/"); registry.addResourceHandler("/templates/**").addResourceLocations("classpath:/templates/"); super.addResourceHandlers(registry); } @Override public void configureDefaultServletHandling(DefaultServletHandlerConfigurer configurer) { configurer.enable(); } @Override public void addInterceptors(InterceptorRegistry registry) { //拦截规则:除了/index,/system/user/validate其他都拦截判断 registry.addInterceptor(new LoginInterceptor()).addPathPatterns("/**").excludePathPatterns("/index","/system/user/validate"); super.addInterceptors(registry); }}
这边在写的时候遇到点问题,在WebConfig类上多加了2个注解,分别是@EnableWebMvc
@ComponentScan
这两个注解一个是配置包扫描的,一个是启用Spring MVC支持。感觉加了这两个注解就是把spring boot的默认配置全部取消了,全部是由自己配置,这就导致了我的静态资源一直访问不到。
addInterceptors
这个方法是添加拦截器,
registry.addInterceptor(new LoginInterceptor()).addPathPatterns(“/**”).excludePathPatterns(“/index”,”/system/user/validate”);
这个是使用拦截器拦截所有请求,除了”/index”,”/system/user/validate”这两个路径
addResourceHandlers(ResourceHandlerRegistry registry)这个方法是这边添加拦截器之后默认的静态资源路径失效,在这个方法中需要重新指定。
阅读全文
0 0
- Spring boot之登录拦截器
- Spring Boot 拦截器之验证登录
- spring boot之拦截器
- Spring Boot 学习系列之拦截器,实现用户登录拦截
- Spring boot之拦截器的实现
- spring boot 拦截器之WebMvcConfigurerAdapter
- spring boot LoginInterceptor(登录拦截器)无法注入bean
- Spring Boot 拦截器
- Spring Boot 拦截器
- Spring Boot 拦截器
- Spring Boot 拦截器
- Spring Boot 拦截器
- Spring Boot 拦截器
- Spring-Boot拦截器
- spring boot 拦截器
- Spring Boot拦截器
- spring boot 拦截器
- Spring Boot 拦截器
- OC -基础(二) 学习中。。。
- MooseFS3.0分布式文件系统安装升级手记【安装升级03】
- 数据库学习(2)
- windows socket编程实现两台电脑间的通信
- 扒一扒---UML图与软件工程那点关系
- Spring boot之登录拦截器
- HDU 2028 看看输入的技巧
- kaggle Code : Titanic: Machine Learning from Disaster 分类
- 单点登录生成证书遇到的问题
- jquery和javascript屏蔽右键菜单及阻止事件冒泡
- Angular 环境安装与配置
- 软件的国际化、Jstl国际化标签
- 一分钟了解“be 形容词1 and 形容词2 的用法”
- win10下MongoDB安装与配置