1. 需求
分析接口:
由于项目是前后端分离的项目,故所有controller返回值都是json格式,可在controller层添加@ResponseBody
实现。
前端发送http数据采用Content-Type: application/json
格式,故需要 在接受参数时使用@RequestBody
接受参数(如果前端采用:x-www-form-urlencoded
,则controller接口方法需要使用@RequestParam(value= "")
注解 接受参数)
2. 代码实现
2.1 interceptor包(拦截器配置)
拦截器,如果用户未登录抛出异常,若已登录,则返回true
为什么不直接返回ResponseVo.error()
,因为preHandle
方法的返回值是布尔类型,且我们需要对指定异常进行处理
UserLoginInterceptor.java
@Slf4j
public class UserLoginInterceptor implements HandlerInterceptor {
/**
* true 表示继续流程, false表示中断
* @param request
* @param response
* @param handler
* @return
* @throws Exception
*/
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
log.info("preHandle...");
// CURRENT_USER = "currentUser"
User user = (User) request.getSession().getAttribute(MallConst.CURRENT_USER);
if(user == null) {
log.info("user == null");
// 抛出指定异常
throw new UserLoginException();
// return false;
// return ResponseVo.error(ResponseEnum.NEED_LOGIN);
}
return true;
}
}
InterceptorConfig.java
@Configuration
public class InterceptorConfig implements WebMvcConfigurer {
@Override
public void addInterceptors(InterceptorRegistry registry) {
registry.addInterceptor(new UserLoginInterceptor())
.addPathPatterns("/**")
.excl