账号密码登录
微信安全登录
微信扫描二维码登录

登录后绑定QQ、微信即可实现信息互通

手机验证码登录
找回密码返回
邮箱找回 手机找回
注册账号返回
其他登录方式
分享
  • 收藏
    X
    spring拦截器自定义header头信息,读取不到数据????
    49
    0
    登录信息是使用jwt保存的,所以我想在拦截器把jwt用户信息解析出来,然后放在header头中,以便后续业务需要用户信息直接可以读取header头信息。但是我设置了header读取不到数据,怎么回事??? public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) { //统一拦截 logger.info("============拦截请求.........=============="); String headerToken = request.getHeader(CoreCommonConstant.H_TOKEN_KEY); String paramToken = request.getParameter(CoreCommonConstant.H_TOKEN_KEY); if (StringUtils.isAllBlank(headerToken, paramToken)) { throw new BizException(GlobalResponseResultEnum.LOSE_AUTH_TOKEN_ERROR.getCode(),GlobalResponseResultEnum.LOSE_AUTH_TOKEN_ERROR.getMessage()); } String token = StringUtils.isBlank(headerToken) ? paramToken : headerToken; Claims claims; try{ claims = CsJwtUtil.parseJwt(token); }catch (CheckJwtException e){ throw new BizException(e.getCode(),e.getMessage()); } claims.put("tokenExpire",claims.get("exp")); request.setAttribute("TEST",1111);// 测试// request.setAttribute(CoreCommonConstant.USER_INFO,URLEncoder.encode(JSON.toJSONString(claims), "UTF-8")); System.out.println(request.getHeader("TEST"));//读取数据为 null return true; }
    0
    打赏
    收藏
    点击回答
        全部回答
    • 0
    • 可人的小仙女 VIP会员 1楼

      在Spring中,你可以在拦截器中使用@PreAuthorize注解来设置访问权限。这将允许只有具有特定权限的用户才能访问某些资源。

      如果你在拦截器中尝试读取未被授权的头信息,那么可能会出现问题。这是因为Spring在拦截器执行之前并不会执行你的代码。所以,如果你尝试在拦截器中读取一个不存在的头信息,Spring将不会找到任何响应,因此你将不会看到任何错误消息。

      为了使问题得到解决,你需要确保你的拦截器执行后,返回一个包含适当响应的ResponseEntity。这可以通过在你的拦截器中调用return ResponseEntity.ok()来完成。

      例如:

      java @GetMapping("/path") public ResponseEntity<String> get(@PreAuthorize("hasRole('admin')") ResponseEntity<String> responseEntity) { // your code here return ResponseEntity.ok().build(); }

      在这个例子中,hasRole('admin')是你希望在访问该路径时检查的用户角色。你可以使用其他角色,只要它们符合你的访问策略。

      如果你的响应体是一个实体对象,那么你可以使用@RequestBody注解来接收响应体的数据。例如:

      java @PostMapping("/path") public ResponseEntity<String> post(@RequestBody String requestBody) { // your code here return ResponseEntity.ok().build(); }

      在这个例子中,@RequestBody注解允许你在拦截器中接收HTTP请求体的数据。你可以使用这个数据来构建你的响应体。

    更多回答
    扫一扫访问手机版
    • 回到顶部
    • 回到顶部