gpt4 book ai didi

java - Spring Security HeaderPreAuthentication Principal 未从 @AuthenticationPrincipal 解析

转载 作者:行者123 更新时间:2023-12-04 15:06:42 28 4
gpt4 key购买 nike

我有一个现有的 Spring Boot 应用程序,它对由第三方身份验证服务处理的 Web 应用程序进行身份验证。与 SiteMinder 一样,第 3 方服务将 header 注入(inject) HTTP 请求,例如 USER_HEADER。我的任务是配置现有应用程序以提取此 HTTP header 并通过 Spring Security @AuthenticatedPrincipal 将生成的 Auth 对象提供给 MVC 层的 Controller 。注解。

如前所述,项目是一个 Spring Boot 应用程序,版本 1.1.9.RELEASE,带有 Java 8。

(下面显示的代码来自一个反射(reflect)功能的测试项目)

请注意 此应用程序仅是 Java Config。不允许使用 XML(我的领导授权)

通过挖掘 Spring Security reference以及我知道需要使用 RequestHeaderAuthenticationFilter 的其他各种文章并将其注入(inject)过滤器链以从请求 header 中获取用户名。

筛选:

public class HeaderAuthenticationFilter extends RequestHeaderAuthenticationFilter {
private static final Logger logger = LoggerFactory.getLogger(HeaderAuthenticationFilter.class);
private final String HEADER = "USER_HEADER";

public HeaderAuthenticationFilter() {
super();
this.setPrincipalRequestHeader(HEADER);

// This setting returns an HTTP 404 with no error message instead of an HTTP 500 with the "missing header" exception message
this.setExceptionIfHeaderMissing(false);
}

@Override
protected Object getPreAuthenticatedPrincipal(HttpServletRequest request) {
logger.debug("Authorizing URI: " + request.getRequestURI());

try {
return super.getPreAuthenticatedPrincipal(request);
} catch(PreAuthenticatedCredentialsNotFoundException e) {
logger.error("Could not find request header " + HEADER + " in request", e);
return null;
}
}
}

如您所见,非常基本的过滤器。

使用我现在拥有的代码,用户从 HTTP 请求中提取,通过 PreAuthentication 过程进行,其中 PreAuthenticatedAuthenticationToken 由自定义 AuthenticationManager 创建,用户业务对象作为主体注入(inject) token ,最终 token 分配给 SecurityContext :
SecurityContextHolder.getContext().setAuthentication(principal);

但是,当我用 @AuthenticationPrincipal User user 注释我的 Controller 方法时,返回的用户对象是一个空的用户对象。当我将方法参数更改为 Authentication user并明确调用 user.getPrincipal()我得到用户对象就好了。 @AuthenticationPrincipal 像这样失败有什么原因吗?

谢谢,如果需要更多详细信息,请告诉我!

最佳答案

原因@AuthenticationPrincipal没有解决是因为我没有用 @EnableWebMvcSecurity 注释我的 WebSecurityConfigurerAdapter 类

添加此注释解决了问题

关于java - Spring Security HeaderPreAuthentication Principal 未从 @AuthenticationPrincipal 解析,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27927146/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com