spring安全性:如何将@PreAuthorize应用于SwitchUserFilter

spring安全性:如何将@PreAuthorize应用于SwitchUserFilter,spring,spring-security,spring-3,Spring,Spring Security,Spring 3,我必须根据用户的用户ID检查用户是否具有切换用户的权限。在我的安全xml中,在元素中,我指定了一个自定义过滤器: <custom-filter after="FILTER_SECURITY_INTERCEPTOR" ref="switchUserProcessingFilter"/> <beans:bean id="switchUserProcessingFilter" class="com.something.MySwitchUserFilter">

我必须根据用户的
用户ID
检查用户是否具有切换用户的权限。在我的安全xml中,在
元素中,我指定了一个自定义过滤器:

<custom-filter after="FILTER_SECURITY_INTERCEPTOR" ref="switchUserProcessingFilter"/>

<beans:bean id="switchUserProcessingFilter" class="com.something.MySwitchUserFilter">
        <beans:property name="userDetailsService" ref="userServices" />
        <beans:property name="switchUserUrl" value="/admin/switchUser" />
        <beans:property name="exitUserUrl" value="/exitUser" />
        <beans:property name="successHandler" ref="userSwitchSuccessHandler"></beans:property>
    </beans:bean>

@PreAuthorize
正在其他位置工作,但我想知道为什么它不在这里工作。请注意,我还传递了一个请求参数“
userId
”以及惯用的“
j_username
”。请注意,我可以切换用户,只是注释没有被处理。

为什么要这样做?为什么不直接将
canISwitchToThisUser
的代码放入该方法中?@LukeTaylor-此预授权检查也存在于一个业务方法中,该方法用于为没有此权限的用户删除“切换用户”链接。。此检查用于服务器端安全。。如果我能像上面那样做,我可以在两个方面重用代码places@LukeTaylor-我相信spring安全性注释可以在spring创建的所有bean上工作。。我只是不明白为什么它不在这里工作。您可以通过调用该方法轻松地重用该逻辑,并获得类型安全的好处。我真的看不出这样做有什么好处。它不起作用的原因可能有很多,但如果没有更多的信息,就很难说了
canISwitchToThisUser(#{request.getAttribute('userId')}
可能不是有效的表达式。表达式中有表达式分隔符。如果没有其他内容,则缺少一个括号。应该是:
@PreAuthorize(“canISwitchToThisUser(#{request.getAttribute('userId'))
    @Override
    @PreAuthorize("canISwitchToThisUser(#{request.getAttribute('userId')}")
    protected Authentication attemptSwitchUser(HttpServletRequest request) throws AuthenticationException {
        return super.attemptSwitchUser(request);

    }