spring boot 2.0(四):拦截器(拦截非登录、排除静态资源)

本文介绍了如何在Spring Boot 2.0中配置拦截器,特别是处理登录拦截以及避免静态资源被拦截的问题。通过在WebConfig中设置静态资源映射并指定拦截器排除静态资源路径,确保静态文件可以正常访问。

控制器:WebConfig

注:有很多同学说静态资源被拦截了,处理方法:在addResourceHandlers中加入静态资源映射,本文映射为/static/**了,然后在拦截器中excludePathPatterns中加入/static/**,这样静态资源即可放行。

package com.nyfz.util.interceptor;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.util.ResourceUtils;
import org.springframework.web.servlet.config.annotation.DefaultServletHandlerConfigurer;
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.WebMvcConfigurer;
import org.springframework.web.servlet.view.InternalResourceViewResolver;
import org.springframework.web.servlet.view.JstlView;

@Configuration
public class WebConfig implements WebMvcConfigurer  {
	 
		@Autowired
		LoginInterceptor loginInterceptor;
	 
		/**
		 * 不需要登录拦截的url
		 */
		final String[] notLoginInterceptPaths = {"/static/**","/admin/login","/error/**","/login"};
	 
		@Override
		public void addInterceptors(InterceptorRegistry registry) {
			// 这里添加多个拦截器
			// 登录拦截器
			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;
		}*/
	 
		/**
		 * 配置不需要经过controller就跳转到登录页面
		 */
		@Override
		public void addViewControllers(ViewControllerRegistry registry) {
			registry.addViewController("/login").setViewName("login");
	 
		}

		/***
		 * addResourceLocations指的是文件放置的目录,addResoureHandler指的是对外暴露的访问路径
		 */
		@Override
		public void addResourceHandlers(ResourceHandlerRegistry registry) {
			// TODO Auto-generated method stub
			//排除静态资源拦截
			registry.addResourceHandler("/static/**").addResourceLocations(ResourceUtils.CLASSPATH_URL_PREFIX+"/static/");
			WebMvcConfigurer.super.addResourceHandlers(registry);
		}
		
}

 

登录拦截器:LoginInterceptor

package com.nyfz.util.interceptor;


import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.handler.HandlerInterceptorAdapter;

@Configuration
public class LoginInterceptor extends HandlerInterceptorAdapter{
	Logger logger = LoggerFactory.getLogger(getClass());
 
	@Override
	public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
		logger.info("进入LoginInterceptor拦截器==============");
		String basePath = request.getContextPath();
		String path = request.getRequestURI();
		logger.info("basePath:" + basePath);
		logger.info("path:" + path);
		logger.info("userkey:"+request.getSession().getAttribute("userkey"));
		if(request.getSession().getAttribute("userkey") == null){
			
			logger.info("尚未登录,跳转到登录界面");
			response.setHeader("Content-Type", "text/html;charset=UTF-8");
			response.sendRedirect(request.getContextPath() + "/login");
			return false;
		}
		logger.info("已登录,放行!");
		return true;
	}
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值