1

我只想为来自 HTTP 请求的调用运行身份验证/授权。

我想要启用身份验证/授权的控制器上的方法是从多个来源调用的。在这种情况下,它可以由另一个控制器调用,也可以由直接 HTTP 请求调用。

我可以关闭来自其他控制器的调用的身份验证/授权吗?

如果您还不够清楚,请进一步阅读。

假设我在控制器 A 上有一个方法 doIt()。我还有一个控制器 B,我在其中注入控制器 A。在控制器 B 上的某个时刻,我调用“a.doIt()”,但我也可以调用doIt() 来自对 doIt.do 的 HTTP 调用。如果调用来自 HTTP 调用,我想测试身份验证/授权调用,但如果它来自控制器 B,则不测试。

4

3 回答 3

1

您正在 B 中注入 A 的安全代理 bean。您不能在没有代理的情况下注入 A 吗?
Bean A 代理:

<bean id="beanASecured" class="org.springframework.aop.framework.ProxyFactoryBean">
  <property name="targetName" value="beanA"/>
  <property name="interceptorNames">
    <value>securityInterceptor</value>
  </property>
</bean>

安全拦截器:

<bean id="securityInterceptor" class="org.acegisecurity.intercept.method.aopalliance.MethodSecurityInterceptor">
   ...
</bean>

Bean A 未代理:

<bean id="beanA" class="com.A"/>

Bean B 注入了 bean 'A not proxied':

<bean id="beanB" class="com.B">
   <constructor-arg ref="beanA"/>
</bean>
于 2009-07-18T19:55:58.330 回答
0

您只需要在 URL 上配置 spring 身份验证,而不是在方法调用上。这对你有用。

于 2009-07-16T05:13:32.713 回答
0

我没有看到任何方法可以做到这一点,我的猜测是你只需要有第二种方法,如实际的其他控制器调用的doitDirectCall(..)在 HTTP 请求上调用的 doit(..)。

于 2009-07-16T16:25:43.963 回答