`
lihao312
  • 浏览: 478979 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

spring-boot 加入拦截器Interceptor

阅读更多
1.spring boot拦截器默认有
  • HandlerInterceptorAdapter
  • AbstractHandlerMapping
  • UserRoleAuthorizationInterceptor
  • LocaleChangeInterceptor
  • ThemeChangeInterceptor


2.配置spring mvc的拦截器WebMvcConfigurerAdapter
public class WebAppConfig extends WebMvcConfigurerAdapter


3.实现添加拦截器方法
public void addInterceptors(InterceptorRegistry registry){

}
registry.addInterceptor可以通过此方法添加拦截器, 可以是spring提供的或者自己添加的

4.实例部分

public class WebAppConfig extends WebMvcConfigurerAdapter{	
    public static void main(String[] args) {
		SpringApplication.run(WebAppConfig.class, args);
	} 
    
    /**
     * 配置拦截器
     * @author lance
     * @param registry
     */
    public void addInterceptors(InterceptorRegistry registry) {
    	registry.addInterceptor(new UserSecurityInterceptor()).addPathPatterns("/user/**");
	}
}

UserSecurityInterceptor代码
public class UserSecurityInterceptor implements HandlerInterceptor {

	@Override
	public boolean preHandle(HttpServletRequest request,
			HttpServletResponse response, Object handler) throws Exception {
        
        return true;
	}

	@Override
	public void postHandle(HttpServletRequest request,
			HttpServletResponse response, Object handler,
			ModelAndView modelAndView) throws Exception {
	}

	@Override
	public void afterCompletion(HttpServletRequest request,
			HttpServletResponse response, Object handler, Exception ex)
			throws Exception {

	}

}


5.demo地址
https://github.com/leelance/spring-boot-all/tree/master/spring-boot-samples
分享到:
评论
5 楼 feibabm 2017-06-01  
楼主,想问下,我配置的这个拦截器为啥没有生效呢?

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.InterceptorRegistration;
import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter;
import org.springframework.web.servlet.handler.HandlerInterceptorAdapter;

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

@Configuration
public class WebSecurityConfig extends WebMvcConfigurerAdapter {

    /**
     * 登录session key
     */
    public final static String SESSION_KEY = "user";

    @Bean
    public SecurityInterceptor getSecurityInterceptor() {
        return new SecurityInterceptor();
    }

    @Override
    public void addInterceptors(InterceptorRegistry registry) {
        InterceptorRegistration addInterceptor = registry.addInterceptor(getSecurityInterceptor());

        // 排除配置
//        addInterceptor.excludePathPatterns("/error");
//        addInterceptor.excludePathPatterns("/login**");

        // 拦截配置
        addInterceptor.addPathPatterns("/**");
    }

    private class SecurityInterceptor extends HandlerInterceptorAdapter {

        @Override
        public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler)
                throws Exception {
            HttpSession session = request.getSession();
            if (session.getAttribute(SESSION_KEY) != null)
                return true;

            // 跳转登录
            String url = "/login";
            response.sendRedirect(url);
            return false;
        }
    }
}
4 楼 lihao312 2016-07-07  
什么都不懂的孩子 写道
请问一下registry.addInterceptor(new UserSecurityInterceptor()).addPathPatterns("/user/**");  一句的作用是什么?


是真对请求的URl拦截的,只拦截/user/**下的所有路径,其他路径不拦截
3 楼 爱you不释手 2016-06-23  
1 、2 楼 那句的意思是加入名称为UserSecurityInterceptor的拦截器,并拦截已user开头的请求
2 楼 somefuture 2015-11-05  
什么都不懂的孩子 写道
请问一下registry.addInterceptor(new UserSecurityInterceptor()).addPathPatterns("/user/**");  一句的作用是什么?

这个是调用自定义的拦截器拦截指定的路径模式。
1 楼 什么都不懂的孩子 2015-06-02  
请问一下registry.addInterceptor(new UserSecurityInterceptor()).addPathPatterns("/user/**");  一句的作用是什么?

相关推荐

Global site tag (gtag.js) - Google Analytics