服务器之家:专注于VPS、云服务器配置技术及软件下载分享
分类导航

PHP教程|ASP.NET教程|Java教程|ASP教程|编程技术|正则表达式|C/C++|IOS|C#|Swift|Android|VB|R语言|JavaScript|易语言|vb.net|

服务器之家 - 编程语言 - Java教程 - SpringBoot拦截器实现登录拦截的示例代码

SpringBoot拦截器实现登录拦截的示例代码

2022-10-23 16:31C'z x Java教程

本文主要介绍了SpringBoot拦截器实现登录拦截,文中根据实例编码详细介绍的十分详尽,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

可以对URL路径进行拦截,可以用于权限验证、解决乱码、操作日志记录、性能监控、异常处理等

SpringBoot拦截器实现登录拦截的示例代码

 

实现代码

新建 interceptor包

SpringBoot拦截器实现登录拦截的示例代码

添加拦截器代码

package com.qcby.interceptor;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.method.HandlerMethod;
import org.springframework.web.servlet.HandlerInterceptor;
import org.springframework.web.servlet.ModelAndView;

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

public class LoginInterceptor  implements HandlerInterceptor {

  @Autowired
  private HttpSession httpSession;
  //Controller逻辑执行之前
  @Override
  public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
      System.out.println("preHandle....");
      String uri = request.getRequestURI();
      System.out.println("当前路径"+uri);

      /**
       * HandlerMethod=>Controller中标注@RequestMapping的方法
       *  需要配置静态资源不拦截时,添加这块逻辑  => 前后端分离项目
       */
      if (!(handler instanceof HandlerMethod)) {
          return true;
      }
      if (httpSession.getAttribute("username") == null) {
          // 未登录跳转到登录界面
          throw  new RuntimeException("no login!");
      } else {
          return true;
      }
  }

  //Controller逻辑执行完毕但是视图解析器还未进行解析之前
  @Override
  public void postHandle(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Object o, ModelAndView modelAndView) throws Exception {
      System.out.println("postHandle....");
  }

  //Controller逻辑和视图解析器执行完毕
  @Override
  public void afterCompletion(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Object o, Exception e) throws Exception {
      System.out.println("afterCompletion....");
  }
}

注册,配置拦截路径和排除登录需访问路径

SpringBoot拦截器实现登录拦截的示例代码

package com.qcby.config;

import com.qcby.interceptor.LoginInterceptor;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;

@Configuration
public class WebMvcConfig implements WebMvcConfigurer {

  @Override
  public void addInterceptors(InterceptorRegistry registry) {
      registry.addInterceptor(loginInterceptor())
              .addPathPatterns("/**")
              // 那些路径不拦截
              .excludePathPatterns("/user/login","/error");
  }

  @Bean
  public LoginInterceptor loginInterceptor(){
      return new LoginInterceptor();
  }
}

实现类

@RestController
@RequestMapping("user")
public class UserController {
@Autowired
  private UserService userService;
  @Autowired
  private HttpSession session;
  @ApiOperation("用户登录接口")
  @RequestMapping(value="login",method = {RequestMethod.GET,RequestMethod.POST})
  public Map<String,Object>login(User user){
      Map<String,Object> map=new HashMap<>();
      map.put("code",0);
      if(StringUtils.isEmpty(user.getUsername())||StringUtils.isEmpty(user.getPassword())){
          map.put("msg","用户或密码为空!");
          return map;
      }
      QueryWrapper<User> queryWrapper=new QueryWrapper<>();
      queryWrapper.eq("username",user.getUsername())
              .eq("password",user.getPassword());
      User user1=userService.getOne(queryWrapper);
      if(user1!=null){
          map.put("cod",1);
          map.put("data",user1);
          session.setAttribute("username",user1.getUsername());
      }else {
          map.put("msg","用户名或密码错误!");
      }
      return map;
  }
}

当我们未登录时我们不能进入拦截的页面

SpringBoot拦截器实现登录拦截的示例代码

登录

SpringBoot拦截器实现登录拦截的示例代码

登录之后我们就能进入hello方法了

SpringBoot拦截器实现登录拦截的示例代码

到此这篇关于SpringBoot拦截器实现登录拦截的示例代码的文章就介绍到这了,更多相关SpringBoot拦截器实现登录拦截内容请搜索服务器之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持服务器之家!

原文链接:https://blog.csdn.net/m0_52012606/article/details/123691158

延伸 · 阅读

精彩推荐