ホームページ  >  記事  >  ウェブフロントエンド  >  Vue2.0 axios フロントエンドおよびバックエンドのログイン インターセプター

Vue2.0 axios フロントエンドおよびバックエンドのログイン インターセプター

小云云
小云云オリジナル
2018-01-02 09:29:291954ブラウズ

vue が 2.0 に更新された後、作者は vue-resource を更新しないことを発表しましたが、axios の使用を推奨しました。少し前に、初めてプロジェクトで vue を使用したときのログインの問題について、私の経験をここに書き留めておきます。この記事では主に、Vue2.0 axios フロントエンドおよびバックエンドのログイン インターセプターについて説明します (例を示した説明)。編集者はこれが非常に良いものだと思ったので、皆さんの参考として今から共有します。編集者をフォローして見てみましょう。皆さんのお役に立てれば幸いです。

まず第一に、バックエンド:

import org.springframework.web.servlet.handler.HandlerInterceptorAdapter;

import com.lovnx.gateway.po.User;

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

public class LoginInterceptor extends HandlerInterceptorAdapter{

  @Override
  public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {

    User user = (User)request.getSession().getAttribute("user");
    if(user == null){
    response.sendError(401);
      return false;
    }else
      return true;
  }
}

ここで行われる処理は次のとおりです: セッションにユーザーがいない場合、401 エラーがフロントエンドに返されます。

フロントエンド:

import Vue from 'vue'
import ElementUI from 'element-ui'
import 'element-ui/lib/theme-default/index.css'
import App from './App'
import router from './router'
import axios from 'axios'


// http response 拦截器
axios.interceptors.response.use(
  response => {
    return response;
  },
  error => {
    if (error.response) {
      if (error.response.status == 401) {
          store.commit(types.LOGOUT);
          router.replace({
            path: 'login',
            query: {redirect: router.currentRoute.fullPath}
          })
      }
    }
    return Promise.reject(error.response.data)  // 返回接口返回的错误信息
  }
);

ここでのインターセプターは main.js で記述されていることに注意してください。

//————————————–区切り線————————————–//

もちろん上記の方法はログインページをVueで書く方法ですプロジェクトでは、独立したログイン ページを Vue プロジェクトと組み合わせて使用​​する例を次に示します。

プロジェクトディレクトリ:

staticとindex.htmlはwebpackでパッケージ化されたものです。

ここでのアイデアは、以前のブログ投稿と組み合わせる必要があります: セッション タイムアウトを実装し、ログイン ページにジャンプするように ajax を書き直す

一般的なアイデアは次のとおりです: 任意のページをリクエストすると、バックエンド インターセプターがリクエストをインターセプトし、ユーザーをチェックしますセッション内の情報 存在するかどうかに関係なく、存在しない場合はこのlogin.htmlにジャンプし、存在する場合は通常どおりデータに応答します。ここでフロントエンドインターセプターを少し変更する必要があります:

import Vue from 'vue'
import ElementUI from 'element-ui'
import 'element-ui/lib/theme-default/index.css'
import App from './App'
import router from './router'
import axios from 'axios'


// http response 拦截器
axios.interceptors.response.use(
  response => {
  //这个判断是关键,如果返回登陆页面内容了,就刷新当前页面,经后端处理就会跳转到登陆页面了
  var temp = response.data + "";
      if (temp.indexOf('lkdjoifdgjdfgjdfgjfh14546') > -1) {
        router.go(0);
      }
    return response;
  },
  error => {
    if (error.response) {
      //退出登陆的时候就响应401即可
      if (error.response.status == 401) {
          router.go(0);
      }
    }
    return Promise.reject(error.response.data)  // 返回接口返回的错误信息
  }
);

その中で、lkdjoifdgjdfgjdfgjfh14546 はログインページの隠しフィールドに書き込まれます。

バックエンドインターセプター:

import org.springframework.web.servlet.handler.HandlerInterceptorAdapter;

import com.lovnx.gateway.po.User;

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

public class LoginInterceptor extends HandlerInterceptorAdapter{

  @Override
  public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
    String requestUri = request.getRequestURI();
    String contextPath = request.getContextPath();

    if (requestUri.indexOf("/login.html") > -1 || requestUri.indexOf("/system/login") > -1) {
      return true;
    }

    User user = (User)request.getSession().getAttribute("user");
    if(user == null){
      // 未登录跳转到login页面!");
        response.sendRedirect(contextPath + "/login.html");
      return false;
    }else
      return true;
  }

}

関連推奨事項:

JAVAEE - カスタムインターセプター、struts2 タグ、ログイン関数および検証ログインインターセプターの実装

Vue インターセプター vue-resource インターセプト インターセプターの使用方法の詳細な説明

WeChat アプレット開発用のページ インターセプターの詳細な説明

以上がVue2.0 axios フロントエンドおよびバックエンドのログイン インターセプターの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。