【问题标题】:Concurrency issues on @Autowire HttpServletRequest request in Spring @Controller,@Service and @ComponentSpring @Controller、@Service 和 @Component 中 @Autowire HttpServletRequest 请求的并发问题
【发布时间】:2021-02-21 03:53:15
【问题描述】:

由于我在 httpservletrequest 标头中消耗了大量数据并在服务类的请求属性中设置了很多值,我不确定这是否会导致线程安全问题,我查看了网络是否会导致自动装配 httpservlet 请求线程安全问题,我的意见不一

以下是我自动连接 httpservletrequest 的地方

@RestController
Public class UserController {
 
 @Autowire
 HttpServletRequest httpServletRequest;

 @Autowire
 IAMService iamservice;
 
 @PostMapping("/addUser")
 public String addUser(@RequestBody UserDto userdto){
          return iamservice.addUser(userdto);
 }
}

@Service
Public Class IAMService {

 @Autowire
 HttpServletRequest httpServletRequest;

 @Autowire
 UserDao userDao;

 public String addUser(UserDto userdto){
    Long primaryKey = userDao.save(userdto,httpServletRequest.getHeader("loggedInUserId"));
    httpServletRequest.setAttribute("userPrimaryKey",primaryKey);
    return "User is added successfully";
 }
}

【问题讨论】:

    标签: java spring spring-boot spring-mvc servlets


    【解决方案1】:

    我们不应该@Autowire HttpServletRequest。考虑如下修改您的代码以有效使用请求对象并避免线程安全问题-

    @RestController
    Public class UserController {
    
     @Autowire
     IAMService iamservice;
     
     @PostMapping("/addUser")
     public String addUser(@RequestBody UserDto userdto, HttpServletRequest httpServletRequest){
              return iamservice.addUser(userdto, httpServletRequest);
     }
    }
    
    @Service
    Public Class IAMService {
    
     @Autowire
     UserDao userDao;
    
     public String addUser(UserDto userdto, HttpServletRequest httpServletRequest){
        Long primaryKey = userDao.save(userdto,httpServletRequest.getHeader("loggedInUserId"));
        httpServletRequest.setAttribute("userPrimaryKey",primaryKey);
        return "User is added successfully";
     }
    }
    

    【讨论】:

    • 问题是在某些情况下我需要HttpServletRequest,例如在spring security的userdetailsservice中,控制器建议中的异常处理程序。我如何做到这一点?我也听说 spring 使用代理对象返回当前线程的 servletrequest 是不是真的?
    猜你喜欢
    • 1970-01-01
    • 2011-02-17
    • 2013-06-15
    • 1970-01-01
    • 1970-01-01
    • 2019-10-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多