在Spring Boot應用程序中創建一個過濾器類,用于處理請求:
@Component
public class AuthenticationFilter implements Filter {@Overridepublic void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)throws IOException, ServletException {// 獲取請求頭中的TokenHttpServletRequest req = (HttpServletRequest) request;String token = req.getHeader("Authorization");// 驗證Token是否有效if (isValidToken(token)) {// Token有效,繼續執行請求處理鏈chain.doFilter(request, response);} else {// Token無效,返回401錯誤HttpServletResponse res = (HttpServletResponse) response;res.sendError(HttpServletResponse.SC_UNAUTHORIZED, "Unauthorized");}}private boolean isValidToken(String token) {// 在這里進行Token驗證,比如驗證Token的簽名、過期時間等// 如果Token有效,返回true;否則返回false// ...return false;}}
然后,在Spring Boot應用程序中配置該過濾器:
@Configuration
public class WebConfig implements WebMvcConfigurer {@Autowiredprivate AuthenticationFilter authenticationFilter;@Overridepublic void addInterceptors(InterceptorRegistry registry) {registry.addInterceptor(authenticationFilter);}}
最后,在Vue應用程序中,可以通過在axios的攔截器中添加請求頭來調用該過濾器:
import axios from 'axios';axios.interceptors.request.use(config => {config.headers['Authorization'] = 'Bearer ' + getToken(); // 設置請求頭return config;},error => {return Promise.reject(error);}
);
getToken()是一個自定義的函數,用于獲取存放在前端的Token。在實際開發中,Token通常會在用戶登錄成功后由后端返回,并存儲在前端的localStorage或sessionStorage中。
一般情況下,后端會返回一個包含Token的JSON對象,例如:
{"token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c"
}
const TOKEN_KEY = 'token';function getToken() {return localStorage.getItem(TOKEN_KEY);
}
這樣,每次向后端發送請求時,都會在請求頭中添加一個Authorization字段,該字段的值是通過getToken()函數獲取的。在AuthenticationFilter中,就可以通過獲取該請求頭中的Token來進行驗證。如果Token無效,則返回401錯誤。