- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试为受 Spring 安全保护的 servlet 实现 AccessDecisionManager
,并且需要检查“Authorization” header 的内容。我有以下代码,但 header (我 100% 确定正在发送)返回 null
:
public class MyAccessDecisionManager implements AccessDecisionManager {
public void decide(Authentication arg0, Object arg1, Collection<ConfigAttribute> arg2) throws AccessDeniedException, InsufficientAuthenticationException {
HttpServletRequest req = ((FilterInvocation) arg1).getHttpRequest();
String authHeader = req.getHeader("Authorization"); //this is null
//Do stuff
}
}
查看调试器中的 req
,我可以深入查看有趣的内容以查看以下结构:
SecurityContextHolderAwareRequestWrapper req
|-SavedRequestAwareWrapper request
|-DefaultSavedRequest savedRequest
|-TreeMap headers
|-HttpSessionSecurityContextRepository$Servlet3SaveToSessionRequestWrapper request
|-RequestWrapper request
|-RequestFacade request
|-Request request
|-Request coyoteRequest
|-MimeHeaders headers
MimeHeaders header
包含我的“Authorization” header 并具有正确的值,因此我知道该 header 正在发送到我的服务器。但是,TreeMap headers
缺少我的授权 header ,并且(我假设)是 getHeaders()
正在查看的内容。
我尝试在客户端添加“foo” header 来检查问题是否专门与“授权”有关,但我看到了完全相同的行为。我有权访问的唯一 header 是“accept-encoding”、“connection”、“host”和“user-agent”。
配置为:
<bean id="myAccessDecisionManager" class="com.example.MyAccessDecisionManager" />
<security:http pattern="/api/**"
access-decision-manager-ref="myAccessDecisionManager"
entry-point-ref="myAccessDeniedHandler">
<security:intercept-url pattern="/**" access="IS_AUTHENTICATED_ANONYMOUSLY" />
<security:anonymous enabled="true"/>
<security:access-denied-handler ref="myAccessDeniedHandler"/>
</security:http>
任何人都可以解释发生了什么事或为什么 header 丢失?有什么方法可以访问我的 decide()
函数中的值吗? (或者是否有更好的方法来根据 header 值做出决策?)
最佳答案
我无法确定 AccessDecisionManager
中的问题是什么或如何获取对其他请求 header 的访问权限。相反,我通过在 api 路径上禁用 Spring Security 来解决这个问题:
<security:http pattern="/api/**" security="none"/>
...并使用 Spring MVC 拦截器代替:
<mvc:interceptors>
<mvc:interceptor>
<mvc:mapping path="/api/**"/>
<bean class="com.example.MyInterceptor"/>
</mvc:interceptor>
</mvc:interceptors>
我必须将 AccessDecisionManager
和 AuthenticationEntryPoint
的逻辑包含在拦截器的 preHandle()
方法中,这并不理想,但有效。
关于java - AccessDecisionManager 中的 HTTP 请求缺少 header ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32015800/
我见过here on GitHub默认配置使用如下优先级标签: 我在 AccessDecisionManager 中找不到对这个“优先级”的任何引用。本身。 priority对决策过程有
首先我想问一下,是否可以在 Java 配置中访问默认的 AccessDecisionManager(不使用任何 xml 文件)? 次要的,我的问题看起来像那样。我想将 RoleVoter 添加到我的配
我想在我的 spring 应用程序的授权过程中添加一些业务逻辑,我认为实现自定义 AccessDecisionVoter 是最好的解决方案。 那太好了,但我还没有找到任何方法在不完全重新定义 Acce
我只是好奇当我需要使用自定义 AccessDecisionManager 时我需要你们经验丰富的人提供一些用例,如果有人以前用过的话,谢谢。 最佳答案 Spring Security docs 中给出
我有以下情况:我的应用程序的授权机制是使用 Spring security 实现的。中央类实现了 AccessDecisionManager 并使用选民(每个选民都实现了 AccessDecision
我将基于 ([UserRoleRight]) 模型实现自定义授权,并且应该将权限与 Controller 和方法名称(例如“ Controller |方法”)进行比较。 我使用自定义 UserDeta
我正在尝试为受 Spring 安全保护的 servlet 实现 AccessDecisionManager,并且需要检查“Authorization” header 的内容。我有以下代码,但 head
我正在尝试使用 Java Config 设置一个 Spring Security 3.2 项目,根本不使用 XML。我想要一个支持 RoleHierarchyVoter 和 AclEntryVoter
自定义 AccessDecisionManager 不会在添加过滤器时或其他情况下被调用。理想情况下希望设置 filterBefore 和自定义 AccessDecisionManager(使用 Sp
下面是我的安全配置文件,我想将其更改为java配置 /changepassword
我们正在使用 Grails spring 安全插件: http://grails.org/plugin/spring-security-core 我只是想将默认访问决策管理器从默认的 Affirmat
我尝试使用 spring security 进行一些简单的记住我身份验证,但是当我尝试实现 accessDecisionManager 时发现此错误。这里是错误日志: org.springframew
我是一名优秀的程序员,十分优秀!