vue+springbbot项目 创建拦截器防止未登录就能直接访问其他页面,代码怎么写
时间: 2024-02-01 08:15:11 浏览: 19
在Vue.js前端项目中,可以使用axios拦截器对所有请求进行拦截并添加登录状态的验证。具体实现如下:
```javascript
import axios from 'axios'
import router from '../router'
// 创建axios实例
const service = axios.create({
baseURL: process.env.BASE_API, // api的base_url
timeout: 5000 // 请求超时时间
})
// request拦截器
service.interceptors.request.use(config => {
// 在发送请求之前做些什么
if (localStorage.token) {
// 添加token到请求头
config.headers['Authorization'] = localStorage.token
}
return config
}, error => {
// 对请求错误做些什么
console.log(error) // for debug
Promise.reject(error)
})
// response拦截器
service.interceptors.response.use(
response => {
const res = response.data
if (res.code !== 20000) {
// 根据后端返回的错误码进行相应的操作
if (res.code === 50008 || res.code === 50012 || res.code === 50014) {
// 未登录或登录过期,重定向到登录页
router.push({ path: '/login' })
}
return Promise.reject('error')
} else {
return response.data
}
},
error => {
console.log('err' + error) // for debug
return Promise.reject(error)
}
)
export default service
```
在SpringBoot后端项目中,可以使用Spring MVC的拦截器对所有请求进行拦截并添加登录状态的验证。具体实现如下:
```java
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.springframework.web.servlet.HandlerInterceptor;
import org.springframework.web.servlet.ModelAndView;
public class LoginInterceptor implements HandlerInterceptor {
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response,
Object handler) throws Exception {
// 在请求处理之前进行登录状态的验证
String token = request.getHeader("Authorization");
if (token == null || !token.equals("your_token_here")) {
// 如果未登录或登录状态不正确,则返回401错误
response.setStatus(401);
return false;
}
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 {
// 在请求结束之后进行资源的清理
}
}
```
在Spring Boot应用程序中,可以将拦截器注册到WebMvcConfigurer中:
```java
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 WebAppConfigurer implements WebMvcConfigurer {
@Override
public void addInterceptors(InterceptorRegistry registry) {
// 注册拦截器
registry.addInterceptor(new LoginInterceptor())
.addPathPatterns("/**")
.excludePathPatterns("/login"); // 登录页面不需要进行登录状态的验证
}
}
```
以上代码仅供参考,具体实现需要根据项目的实际情况进行调整。