我只想对来自HTTP请求的调用运行身份验证/授权。
我希望启用身份验证/授权的控制器上的方法是从多个源调用的。在这种情况下,它可以由另一个控制器或直接HTTP请求调用。
我可以关闭来自其他控制器的来电的身份验证/授权吗?
如果你还没有这么清楚的话,请进一步阅读。
假设我在控制器A上有一个方法doIt()。我还有一个控制器B,我在其中注入控制器A.在控制器B的某个点上,我调用'a.doIt()',但是我也可以从HTTP调用doIt.do调用doIt()。 如果呼叫来自HTTP呼叫,我想测试认证/授权的呼叫,但是如果来自控制器B则不测试。
答案 0 :(得分: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>
secutiryInterceptor:
<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>
答案 1 :(得分:0)
您只需要在URL上配置spring身份验证,而不是在方法调用上配置。这对你有用。
答案 2 :(得分:0)
我认为没有办法做到这一点,我猜你只需要第二种方法,比如 doitDirectCall(..),实际的其他控制器调用在HTTP请求中调用getit(..)。