Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/353.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Spring@Controller、@Service和@Component中@Autowire-HttpServletRequest请求的并发性问题_Java_Spring_Spring Boot_Spring Mvc_Servlets - Fatal编程技术网

Java Spring@Controller、@Service和@Component中@Autowire-HttpServletRequest请求的并发性问题

Java Spring@Controller、@Service和@Component中@Autowire-HttpServletRequest请求的并发性问题,java,spring,spring-boot,spring-mvc,servlets,Java,Spring,Spring Boot,Spring Mvc,Servlets,由于我在httpservletrequest报头中消耗了大量数据,并在服务类的request属性中设置了大量值,我不确定这是否会导致线程安全问题,我在网上查看了自动连接httpservlet请求是否会导致线程安全问题,我的看法不一 以下是我自动连线httpservletrequest的地方 @RestController Public class UserController { @Autowire HttpServletRequest httpServletRequest; @Au

由于我在httpservletrequest报头中消耗了大量数据,并在服务类的request属性中设置了大量值,我不确定这是否会导致线程安全问题,我在网上查看了自动连接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";
 }
}

我们不应该@Autowire-HttpServletRequest。考虑修改以下代码以有效地使用请求对象并避免线程安全问题-< /P>
@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,这不是真的吗?这似乎有效