当前位置: 首页 > 面试题库 >

spring security:拦截URL模式access =“#id == 1

柯振濂
2023-03-14
问题内容

我有项目是IAM Spring Security 3.1.3和MVC 3.2

我也希望在路径中的用户标识中匹配主用户标识的URL

    <security:intercept-url pattern="/user/{id}/edit" access="#id == principal.userId"/>

http use-expressions将其设置为true,当尝试principal.userId == 1时可以使用,但是我需要使用从URL中提取的值。

我已经尝试了所有可能的组合。


问题答案:

这是不可能的。但是还有另一种方式。你可以定义自己的网络表达式,该表达式将负责从URL中提取id参数。可能看起来像这样:

<security:intercept-url pattern="/user/{id}/edit" access="getIdUrlPathParameter() == principal.userId"/>

为此,你需要:
1.添加扩展WebSecurityExpressionRoot的 CustomWebSecurityExpressionRoot
2.添加getIdUrlPathParameter()方法。它将有权访问HttpServletRequest对象。
3.定义CustomWebSecurityExpressionHandler,以扩展DefaultWebSecurityExpressionHandler。覆盖createSecurityExpressionRoot方法,然后在此处使用CustomWebSecurityExpressionRoot。
4.定义自定义访问决策管理器(下面的xml)
5. 通过access-decision-manager-ref属性将其注入到http元素中


<security:http access-decision-manager-ref="customAccessDecisionManagerBean" >
    <security:intercept-url pattern="/user/{id}/edit" access="getIdUrlPathParameter() == principal.userId"/>
</security:http>
<bean id="customWebSecurityExpressionHandler" class="com.domain.security.CustomWebSecurityExpressionHandler"/>
<bean id="customAccessDecisionManagerBean" class="org.springframework.security.access.vote.AffirmativeBased">
    <property name="decisionVoters">
        <list>
            <bean class="org.springframework.security.web.access.expression.WebExpressionVoter">
                <property name="expressionHandler" ref="customWebSecurityExpressionHandler" />
            </bean>
        </list>
    </property>
</bean>


 类似资料:
  • 主要内容:实现,步骤 1,Filter.java,步骤 2,AuthenticationFilter.java,DebugFilter.java,步骤 3,Target.java,步骤 4,FilterChain.java,步骤 5,FilterManager.java,步骤 6,Client.java,步骤 7,InterceptingFilterDemo.java,步骤 8拦截过滤器模式(Intercepting Filter Pattern)用于对应用程序的请求或响应做一些预处理/后处理。

  • 拦截过滤器模式(Intercepting Filter Pattern)用于对应用程序的请求或响应做一些预处理/后处理。定义过滤器,并在把请求传给实际目标应用程序之前应用在请求上。过滤器可以做认证/授权/记录日志,或者跟踪请求,然后把请求传给相应的处理程序。以下是这种设计模式的实体。 过滤器(Filter) - 过滤器在请求处理程序执行请求之前或之后,执行某些任务。 过滤器链(Filter Cha

  • 拦截过滤器模式(Intercepting Filter Pattern)用于对应用程序的请求或响应做一些预处理/后处理。定义过滤器,并在把请求传给实际目标应用程序之前应用在请求上。过滤器可以做认证/授权/记录日志,或者跟踪请求,然后把请求传给相应的处理程序。以下是这种设计模式的实体。 过滤器(Filter) - 过滤器在请求处理程序执行请求之前或之后,执行某些任务。 过滤器链(Filter Cha

  • 当我们想要对应用程序的请求或响应进行一些预处理/后处理时,使用拦截过滤器设计模式。 在将请求传递给实际目标应用程序之前,会在请求上定义和应用过滤器。 过滤器可以执行身份验证/授权/记录或跟踪请求,然后将请求传递给相应的处理程序。 以下是此类设计模式的实体。 Filter - 在请求处理程序执行请求之前或之后执行特定任务的过滤器。 Filter Chain - 过滤链带有多个过滤器,有助于在目标上按

  • 尝试反序列化时出现此错误 波乔: 正如错误所说,如果缺少协议,如果用户没有设置协议,如何在反序列化之前插入协议?

  • 拦截文件 bp CreateFileA 创建或打开文件 (32位) bp OpenFile 打开文件 (32位) bp ReadFile 读文件 (32位) bp WriteFile 写文件 (32位) bp GetPrivateProfileStringA (ini文件)