1.拦截器
登录拦截
自定义拦截路径
//全局配置继承WebMvcConfigurer接口
@Configuration
public class MyHandler implements WebMvcConfigurer {
//这里要引入loginHandler自己的拦截器
@Autowired
private LoginHandler loginHandler;
//重写addInterceptors
@Override
public void addInterceptors(InterceptorRegistry registry) {
//在addInterceptor放入自己引入过来的拦截器,
registry.addInterceptor(loginHandler)
.addPathPatterns("/**")// /**是拦截所有
//这里是要放行的路径
.excludePathPatterns("/tologin","/login");
}
}
excludePathPatterns方法参数可以像我这么写也可以写多个excludePathPatterns方法一个一个存放不过太麻烦了
不要忘了引入自己的拦截器
拦截器实现
//全局加载
@Configuration
//实现拦截器HandlerInterceptor 接口
public class LoginHandler implements HandlerInterceptor {
//重写preHandle方法
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
//前端登录后再session作用域存入user数据然后在这里取出
Object user = request.getSession().getAttribute("user");
//判断如果不为空就是登陆了放行返回true
if (user!=null){
return true;
}else {
//为空就是没登录返回false重定向到去登录的页面
response.sendRedirect("/tologin");
return false;
}
}
}
要注意controller一定要想session里存放user对象或者是登录的账号
2.过滤器
过滤器和拦截器的实现是一样的过滤器不需要拦截的路径的话可以写一个单独的类里面写上list方法类上加上@ConfigurationProperties注解吧需要拦截的路径放到properties
@ConfigurationProperties(prefix = "no.yz")
@Data
@Configuration
public class NoLoginPathConfig {
private List<String> path;
}
过滤器实现
@WebFilter
@Component
public class LoginFilter implements Filter {
private Logger logger3 = LoggerFactory.getLogger("LoginFilter");
//这个我是吧不需要拦截的路径放到list集合里面单独写的一个类需要引入
@Autowired
private NoLoginPathConfig noLoginPathConfig;
@Override
public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
//转换为http
HttpServletRequest request = (HttpServletRequest)servletRequest;
logger3.info(new Date()+"-----判断路径是否需要拦截-------");
//判断路径是否需要拦截
if (noLoginPathConfig.getPath().contains(request.getRequestURI())){
//如果不需要拦截直接放行
logger3.info(new Date()+"-----路径可放行-------");
filterChain.doFilter(servletRequest,servletResponse);
}else {
logger3.info(new Date()+"-----获取作用域中的用户名-------");
//获取session作用域里的用户名
Object attribute = request.getSession().getAttribute(SysInfo.userName);
//判断是否为空
if (attribute!=null){
logger3.info(new Date()+"-----用户名为空不放行-------");
//不为空方行
filterChain.doFilter(servletRequest,servletResponse);
}else {
//为空拦截
logger3.info(new Date()+"-----没有登录请先登录------");
throw new NoLoginExcption("没有登录,请登录");
}
}
}
}
着里要注意要加上
@WebFilter @Component
这两个注解实现
Filter
过滤器接口
和拦截器一样需要在controller里在session作用域里存入登录的对象或者账号判断是否有数据当然你要是有其他好的方法也可以