LINUX.ORG.RU

[java] Spring AOP + scoped-proxy


0

1

Есть объект UserInfo у которого scope=«session». Хочется получить к нему доступ из адвайса. Добавил к нему аттрибут <aop:scoped-proxy/>. Все равно, адвайс судя по дебагу получает объект не из сессии, а фиг знает откуда.

Вот код адвайса:

public class LogonRequiredChecker {

	private UserInfo userInfo;
	
	@Autowired
	public void setUserInfo(UserInfo userInfo) {
		this.userInfo = userInfo;
	}
	
	public void checkLoggedUser() throws ServerBeanException {
		if(!userInfo.isLoggedIn())
			throw new ServerBeanException("Попытка обратиться к серверу без авторизации");
	}
}

Вот код конфигурации:

<bean id="userInfo" class="ru.eldis.xdividend.regserver.beans.UserInfo" scope="session">
	<aop:scoped-proxy/>
</bean>
<bean id="logonRequiredChecker" class="ru.eldis.xdividend.regserver.security.LogonRequiredChecker"/>

<aop:config proxy-target-class="true">
	<aop:pointcut
		expression="(@within(ru.eldis.xdividend.regserver.security.LogonRequired) or @annotation(ru.eldis.xdividend.regserver.security.LogonRequired)) and !@annotation(org.springframework.beans.factory.annotation.Autowired)"
		id="logonRequiredMethod"/>
	<aop:aspect id="logonRequired" ref="logonRequiredChecker">
		<aop:before method="checkLoggedUser" pointcut-ref="logonRequiredMethod"/>
	</aop:aspect>
</aop:config>

Как в адвайсе можно получить session объект?


Проблема оказывается была в другом. Hessian клиент не работал с куками, поэтому сессии не работали.

Вылечилось вставкой такого кода в клиенте:

CookieHandler.setDefault(new CookieManager(null, CookiePolicy.ACCEPT_ALL));

vega ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.