1. 程式人生 > 程式設計 >SpringBoot登入攔截配置詳解(實測可用)

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,Object handler,ModelAndView modelAndView) throws Exception {

  }

  @Override
  public void afterCompletion(HttpServletRequest request,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-

到此這篇關於SpringBoot登入攔截配置詳解(實測可用)的文章就介紹到這了,更多相關SpringBoot登入攔截內容請搜尋我們以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援我們!