我在Spring Boot@RestController
中有一些方法,当我将它们添加为参数时,它们似乎可以神奇地访问Spring SecurityAuthentication
或Principal
对象。我想知道,我的方法如何与这些参数工作?它们来自哪里?下面是一个例子:
@GetMapping("/someEndpoint")
public ObjectNode someEndpoint(Authentication authentication) {
...
CustomAuthentication customAuthentication = (CustomAuthentication) authentication;
logger.debug("Name: {}", customAuthentication.getName());
...
}
或
@GetMapping("/anotherEndpoint)
public ObjectNode anotherEndpoint(Principal principal) {
logger.debug(principal.getName());
...
}
也不只是这些Authentication
和Principal
对象。我也看到HttpServletRequest
和其他参数有时在这些控制器端点。它们从何而来,为什么是可选的?在方法中是否有这些对象的列表?
所有问题的答案都在Spring参考文档
对于与身份验证相关的问题,请通读以从高层次上理解它如何在会话中可用。阅读AbstractAuthenticationProcessingFilter
通读文档,查看这里支持的控制器方法参数列表
- Spring MVC参考文档
- Spring安全参考