SpingBoot框架的拦截器配置

(1)引言

在登录模块中,用户只能登录后才能进行访问,所以需要一个拦截器,拦截判断session中是否存在值,如果没有登录就跳转到登录页面且也不能访问其它页面。

(2)步骤

a:

自定义一个拦截器类,这个拦截器需要继承HandlerInterceptorAdapter类并且复写里面的preHandle方法,就可以 在执行方法之前执行此拦截器中业务逻辑:(需要注意的自己定义的这个拦截器类需要交给spring管理:即用注解方式需要在类上加@Component注解)

package cn.itsource.auth.web.interceptor;

import org.springframework.stereotype.Component;
import org.springframework.web.servlet.handler.HandlerInterceptorAdapter;

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

@Component
public class LoginInterceptor extends HandlerInterceptorAdapter{
    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response,     
    Object handler) throws Exception {
        System.out.println("我进入了拦截器!!!");
        //获取当前session中的登录用户
        Object user_in_session = request.getSession().getAttribute("USER_IN_SESSION");
        if (null == user_in_session){ // 如果为空 就跳转到登录页面
            response.sendRedirect("/login"); //跳转登录页面
            return false; //不放行
        }
        return true; //放行
    }
}

b:

该拦截器类还需要进行配置,将自己写的这个拦截器类注册到springBoot中的拦截器配置中:

自定义一个配置类,这个配置类需要实现WebMvcConfigurer接口,且需要在类上加上注解@Configuration,这个类的作用就相当于SSM框架中SpringMVC.xml配置文件。将自己写的拦截器类注册到springBoot管理中就需要在这个类中重写addInterceptors方法

package cn.itsource.auth.web.interceptor;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
import org.springframework.web.servlet.config.annotation.ViewControllerRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;

/**
 * 配置类
 */
@Configuration//表明这是一个配置类,作用例如是之前的xml配置
public class MyConfig implements WebMvcConfigurer{

    @Autowired //注入刚才写的那个自定义的拦截器类
    private LoginInterceptor LoginInterceptor;

    /**
     * 重写该方法是为了表示添加拦截器配置
     * @param registry
     */
    @Override
    public void addInterceptors(InterceptorRegistry registry) {
        //其中/**表示对所有资源的拦截---excludePathPatterns("/login")表示login进行放行
        registry.addInterceptor(LoginInterceptor).addPathPatterns("/**")
                .excludePathPatterns("/login").excludePathPatterns("/assets/**");

        //如果有多个拦截器,都在这里进行拦截器的添加
        registry.addInterceptor(LoginInterceptor).addPathPatterns("/**")
                .excludePathPatterns("/login").excludePathPatterns("/assets/**");
    }

}

拦截器的配置就完成了!!!

 

 

你可能感兴趣的:(java)