SpringBoot实现登录拦截的示例代码
如果我们不进行登录拦截的话,即使我们跳过登录页面直接去访问任意一个页面也能访问成功,那么登录功能就没有意义,同时也会存在安全问题,因为有些操作是要用户登录后才能执行的,如果用户没有登录,该接口就获取不了当前访问的用户也就不知道是哪个用户执行了该操作就会出错。所以我们要进行登录判断,如果没有登录则访问任意页面都跳转到登录页面。
代码实现
- 创建自定义过滤器LoginCheckFilter
- 在启动类上加入注解@ServletComponentScan,才会去扫描过滤器
- 完善过滤器的处理逻辑
具体实现
使用过滤器或者拦截器,在过滤器或者拦截器中判断用户是否已经完成登录,如果没有登录则跳转到登录页面。如果登录了或者该请求不需要登录拦截器直接放行,交由具体的controller进行处理。
LoginCheckFilter
package com.zxy.filter; //urlPatterns配置拦截路径,这里表示拦截所有 @WebFilter(filterName="loginCheckFilter",urlPatterns = "/*") @Slf4j public class LoginCheckFilter implements Filter { //路径匹配器,支持通配符 public static final AntPathMatcher PATH_MATCHER = new AntPathMatcher(); @Override public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException { HttpServletRequest request = (HttpServletRequest) servletRequest; HttpServletResponse response = (HttpServletResponse) servletResponse; //1.获取本次请求的URI String requestURI = request.getRequestURI(); //定义不需要处理的请求路径,下面的*只是字符串,并不是通配符,后面通过check判断时*号就视为通配符了 String[] urls = new String[]{ "/employee/login", "/employee/logout", "/backend/**", "/front/**" }; //2.判断本次请求是否需要处理 boolean check = check(urls,requestURI); //3.如果不需要处理,直接放行 if(check){ filterChain.doFilter(request,response); return; } //4.如果需要处理,判断是否登录 //登录状态,不需要处理,直接放行 if(request.getSession().getAttribute("employee")!=null){ filterChain.doFilter(request,response); return; } //5.如果未登录则返回未登录结果,通过输出流方式向客户端页面响应数据,因为我们返回的是void,所以不能return R.error("NOTLOGIN") response.getWriter().write(JSON.toJSONString(R.error("NOTLOGIN"))); return; } public boolean check(String[] urls,String requestURI){ for(String url:urls){ boolean match = PATH_MATCHER.match(url,requestURI); if(match){ return true; } } return false; } }
到此这篇关于SpringBoot实现登录拦截的示例代码的文章就介绍到这了,更多相关SpringBoot 登录拦截内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!
相关文章
Java使用DateTimeFormatter实现格式化时间
这篇文章主要介绍了Java使用DateTimeFormatter实现格式化时间,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧2020-01-01
最新评论