在控制器中检索活动用户的 UserDetails 的优雅方式
在 Spring 应用程序中,获取登录用户的 UserDetails 可以通过访问来实现身份验证上下文并将主体强制转换为 UserDetails 实现。但是,这种方法可能不太方便或直观。
要简化此过程,请考虑以下优雅的解决方案:
使用 @AuthenticationPrincipal 注解(Spring Security 3.2 ):
Spring Security 3.2 引入了 @AuthenticationPrincipal 注解,它允许将经过身份验证的用户的 UserDetails 自动注入到控制器方法中。
Controller:
<code class="java">public ModelAndView someRequestHandler(@AuthenticationPrincipal User activeUser) { // Logic utilizing the activeUser object }</code>
Spring 3.1 的 HandlerMethodArgumentResolver :
对于早期版本的 Spring 或自定义需求,实现 HandlerMethodArgumentResolver 是一个可行的选择。此解析器确定主体的类型并提取 User 对象。
参数解析器:
<code class="java">public class CurrentUserHandlerMethodArgumentResolver implements HandlerMethodArgumentResolver { // Implementation to check for eligible method parameters and retrieve the User object }</code>
配置:
<code class="java">@Configuration public class ApplicationConfig { // Bean definition for the CurrentUserHandlerMethodArgumentResolver }</code>
使用 CurrentUserWebArgumentResolver(旧版):
在 Spring 3.1 之前,CurrentUserWebArgumentResolver 可以用于类似的功能。
参数解析器:
<code class="java">public class CurrentUserWebArgumentResolver implements WebArgumentResolver { // Implementation for method parameter validation and User object retrieval }</code>
配置:
<code class="java">@Configuration public class ApplicationConfig { // Bean definition for the CurrentUserWebArgumentResolver }</code>
选择的解决方案将取决于应用程序的 Spring 版本和具体要求。然而,这些方法提供了一种优雅且一致的方式来访问控制器中活动用户的 UserDetails。
以上是如何在 Spring 控制器中优雅地检索活动用户的 UserDetails?的详细内容。更多信息请关注PHP中文网其他相关文章!