我用spring mvc(版本4)制作了网络服务 此服务使用http标头中的标记进行授权 我想在http头绑定到模型类auto中的字段值 可能吗?我能怎么做? (见下面的代码和评论)
@Controller
@RequestMapping(value = "/order")
public class OrderController {
private static final Logger logger = LoggerFactory.getLogger(OrderController.class);
@Autowired
private OrderService orderService;
@RequestMapping(value = "/")
@ResponseBody
public List<Order> getAll() throws Exception {
// I want to remove two line below with auto binding (userToken field in model)
// in all controller using token value
String token = request.getHeader("X-Auth-Token"); // remove~
orderService.setUserToken(token); // remove~
orderService.getAllbyUser()
return items;
}
}
@Service
public class OrderService {
//@Autowired - is it possible?
private String userToken;
public String setUserToken(String userToken)
{
this.userToken = userToken;
}
public List<Order> getAllbyUser() {
String userId = userMapper.getUserId(userToken);
List<Order> list = orderMapper.getAllbyUser(userId);
return list;
}
}
答案 0 :(得分:1)
@Autowire是让Spring将豆子注入其中。如果要使用org.springframework.beans.factory.annotation.Value注释将bean注入到bean中。
例如:
@Value("${user.token}")
private String userToken;
这将使Spring搜索VM args和其他地方的user.token
(我不记得并以某种特定的顺序)。
但是,正如我在最初的评论中所说的那样,从这里显示的代码来看,设置此字段似乎是一个错误,因为它是特定于上下文的,而@Service(默认情况下)表示OrderService是一个单例。 / p>
答案 1 :(得分:1)
要从请求中读取标头值,您可以在控制器中使用@RequestHeader("X-Auth-Token")
,如下所示:
@RequestMapping(value = "/")
@ResponseBody
public List<Order> getAll(@RequestHeader("X-Auth-Token") String token) throws Exception {
orderService.setUserToken(token); // remove~
orderService.getAllbyUser()
return items;
}
希望这会对你有所帮助。