(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/**");
}
}
拦截器的配置就完成了!!!