记录一下 关于 回话请求上下文注入数据所有 controller 均可接收
作者:互联网
需求:需要在拦截器中 认证用户身份并且把用户 但是在控制器层需要到用户Dao的数据时 还得 去操作Dao或者 从session 中取,如果存在web无状态情况 即无session 时则需要把数据存入当前会话请求的上下文中;
解决方法:
第一步、创建ArgumentResolver 类
public class ArgumentResolver implements WebArgumentResolver { @Override public Object resolveArgument(MethodParameter methodParameter, NativeWebRequest nativeWebRequest) throws Exception { Class<?> parameterType = methodParameter.getParameterType(); if (parameterType != null){ HttpServletRequest request = nativeWebRequest.getNativeRequest(HttpServletRequest.class); if (parameterType.equals(UserDO.class)){ // 如果数据对象是 userDO 则直接从 请求上下文中获取数据返回 return request.getAttribute("userData"); } } // 正常返回 请求数据 return UNRESOLVED; } }
第二步、创建拦截器类UserInterceptor
public class UserInterceptor implements HandlerInterceptor { @Override public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception { // 这里应该是 取 request.getHeaders 里面的token 取 userID 然后进行查询 返回 UserDO UserDO userDO = ...; //设置返回页面类型和编码 response.setContentType("text/html; charset=UTF-8"); if (userDO != null){ request.setAttribute("userData",userDO); return true; } // 认证失败 response.sendRedirect(request.getContextPath() + "/passport/login"); return false; } }
第三步、创建配置类
@Configuration public class WebConfig extends WebMvcConfigurationSupport { @Override protected void addArgumentResolvers(List<HandlerMethodArgumentResolver> argumentResolvers) { argumentResolvers.add(new ServletWebArgumentResolverAdapter(new ArgumentResolver())); super.addArgumentResolvers(argumentResolvers); } @Override protected void addInterceptors(InterceptorRegistry registry) { InterceptorRegistration registration = registry.addInterceptor(new UserInterceptor()); // registration.excludePathPatterns( // // ); registration.addPathPatterns( "/user/**", "/passport/**" ); super.addInterceptors(registry); } }
第四步、在controller中使用
@GetMapping(value = "/account") public String account( UserDO userDO ){ System.out.println("userData = " + userDO); }
即可获取到相关数据
标签:return,回话,request,userDO,class,UserDO,controller,上下文,public 来源: https://www.cnblogs.com/qianxiaoPro/p/14200970.html