软件编程
位置:首页>> 软件编程>> java编程>> SpringBoot登录拦截配置详解(实测可用)

SpringBoot登录拦截配置详解(实测可用)

作者:xqnode  发布时间:2023-04-22 20:52:21 

标签:SpringBoot,登录,拦截

背景:写一个用户登录拦截,在网上找了一圈没找到好用的,于是自己试验了一下,总结出来,分享给大家。

1.自定义登录 * LoginInterceptor


public class LoginInterceptor implements HandlerInterceptor {

@Override
 public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
 // 这里是关键
   User loginUser = (User) request.getSession().getAttribute("user");
   if (loginUser == null) {
     // 未登录抛出异常,交给统一异常处理器处理
     throw new CustomException(ResultCode.USER_NOT_LOGIN);
   }
   return true;
 }

@Override
 public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {

}

@Override
 public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {

}
}

2.在WebConfigurer中添加 *


@Configuration
public class WebMvcConfig implements WebMvcConfigurer {

@Override
 public void addInterceptors(InterceptorRegistry registry) {
   //注册TestInterceptor *
   registry.addInterceptor(new LoginInterceptor())
       .addPathPatterns("/**")
       // 排除登录注册等接口,注意这里的格式是 /**/xxx
       .excludePathPatterns("/**/login", "/**/register");
 }
}

3.登录接口


/**
  * 登录
  * @return 用户信息
  */
public User login(UserVO userVO. HttpServlet) {
 String username = userVO.getUsername();
 String password = userVO.getPassword();

User user = userMapper.findByUsernameAndPassword(username, password);
 // 未找到用户
 if(user == null) {
   throw new CustomException(ResultCode.USER_ACCOUNT_ERROR);
 }
 // 设置session中的用户信息
 SessionUtils.setSessionAttribute("user", user);
 return user;
}

文中的代码细节不一一列举了,这里重点讨论的 * ,感兴趣的朋友可以私聊我获取其他代码。

结果

未登录的情况下,请求普通接口提示未登录。

SpringBoot登录拦截配置详解(实测可用)

请求登录接口。

SpringBoot登录拦截配置详解(实测可用)

登录后再去请求普通接口,返回正常。

SpringBoot登录拦截配置详解(实测可用)-END-

来源:https://blog.csdn.net/xqnode/article/details/107468535

0
投稿

猜你喜欢

手机版 软件编程 asp之家 www.aspxhome.com