零
在此之前,由于主播一直缺乏session,这次两个小时的寻找bug之旅也让我受益颇多
罪魁祸首:key值写错了,导致一直报错,不过这也让我了解了更多关于session的k-v结构
参数校验
我们需要在全局拦截器注解里面加两个方法
/**
* 校验登录
* @return
*/
boolean checkLogin() default true;
/**
* 校验权限
* @return
*/
boolean checkAdmin() default false;
具体的实现方法是这样的:
private void checkLogin(Boolean checkAdmin){
HttpServletRequest request = ((ServletRequestAttributes)RequestContextHolder.getRequestAttributes()).getRequest();
HttpSession session = request.getSession();
SessionWebUserDto webUserDto = (SessionWebUserDto)session.getAttribute(Constants.SESSION_KEY);
if(webUserDto == null){
throw new BusinessException(ResponseCodeEnum.CODE_901);
}
if(checkAdmin && !webUserDto.isAdmin()){
throw new BusinessException(ResponseCodeEnum.CODE_404);
}
}
其中:
HttpServletRequest request = ((ServletRequestAttributes)RequestContextHolder.getRequestAttributes()).getRequest();
HttpSession session = request.getSession();
SessionWebUserDto webUserDto = (SessionWebUserDto)session.getAttribute(Constants.SESSION_KEY);
有好奇的朋友可能就问了,这三个是什么意思:
在非Controller层(如Service、工具类等)获取当前HTTP请求的Session及其中存储的用户信息
第一句:获取当前HTTP请求对象
第二句:从请求对象获取Session
第三句:从Session获取用户信息
目前我们只是校验了参数,所以我们要加上这两个校验,因此我们得到了一个这样的拦截器:
实现:
因为之前实现了参数校验,所以我们这里只需要做类似的注解就行了