Java Spring@Controller、@Service和@Component中@Autowire-HttpServletRequest请求的并发性问题
由于我在httpservletrequest报头中消耗了大量数据,并在服务类的request属性中设置了大量值,我不确定这是否会导致线程安全问题,我在网上查看了自动连接httpservlet请求是否会导致线程安全问题,我的看法不一 以下是我自动连线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
@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,这不是真的吗?这似乎有效