gpt4 book ai didi

java - Acegi/Spring 安全支持 getUserPrincipal() 吗?

转载 作者:搜寻专家 更新时间:2023-10-31 19:51:18 25 4
gpt4 key购买 nike

我需要将现有应用程序与 Acegi/Spring 安全性连接起来。

为了开始,我正在寻找一条简单的信息:在这种情况下,从我的应用程序调用的 HttpServletRequest.getUserPrincipal() 是否会正确返回通过 Spring 获得的用户名(而不是使用 Spring 特定的对象)?我用谷歌搜索了关于此的相互矛盾的信息。

我假设如果 Acegi 是用过滤器实现的,它能够重载 Servlet API 的 getUserPrincipal(),对吧?

附属问题:如果默认不是这样,有什么办法可以开启吗?

谢谢,

-埃里克

最佳答案

正如之前用户的回答,spring security 支持 getUserPrincipal 和 isUserInRole。以下是 Spring Security 是如何做到的。

当您配置 spring 时,它可以加载以下过滤器:

http://static.springframework.org/spring-security/site/reference/html/ns-config.html#filter-stack

作为标准过滤器配置的一部分,加载了 SecurityContextHolderAwareRequestFilter 过滤器。

检查过滤器 @ https://fisheye.springsource.org/browse/spring-security/tags/spring-security-parent-2.0.4/core/src/main/java/org/springframework/security/wrapper/SecurityContextHolderAwareRequestFilter.java?r=2514

您可以看到它包装并将 HttpServletRequest 对象更改为 SecurityContextHolderAwareRequestWrapper 类,它扩展了 HttpServletRequestWrapper 实现了 HttpServletRequest 并将其反馈给标准的 Servlet Filter doFilter 链。由于 spring 安全过滤器应该被配置为第一个过滤器,所有后续类将看到 SecurityContextHolderAwareRequestWrapper。这包括此过滤器后面的 JSP 页面或 Servlet。

当您从 JSP 页面、Servlet 或此过滤器后面的任何框架调用 isUserInRolegetUserPrincipal 时,它正在调用 HttpServletRequest Spring Security 的实现。

关于java - Acegi/Spring 安全支持 getUserPrincipal() 吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/636172/

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