我正在尝试访问aspectj @Aspect中的会话属性。 当我这样做时,我有例外。
java.lang.IllegalStateException:找不到线程绑定请求:您是指实际Web请求之外的请求属性,还是处理最初接收线程之外的请求?如果您实际上是在Web请求中操作并仍然收到此消息,则您的代码可能在DispatcherServlet / DispatcherPortlet之外运行:在这种情况下,请使用RequestContextListener或RequestContextFilter来公开当前请求。
@Aspect
@Component
public class GlobalFilter {
@Autowired
private EntityManager entityManager;
private static HttpSession httpSession() {
ServletRequestAttributes attr = (ServletRequestAttributes) RequestContextHolder.currentRequestAttributes();
return attr.getRequest().getSession(true);
}
@Before("execution(public !void org.springframework.data.repository.Repository+.find*(..))")
public void beforeFind() {
HttpSession httpSession = httpSession();
Long idClient = (Long) httpSession.getAttribute(SessionKeys.ID_CLIENT);
Long idUser = (Long) httpSession.getAttribute(SessionKeys.ID_USER);
if (idClient != null) {
enableFilter(DatabaseFilter.ID_USER, DatabaseFilter.ID_USER_PARAM_NAME, idUser);
enableFilter(DatabaseFilter.ID_CLIENT, DatabaseFilter.ID_CLIENT_PARAM_NAME, idClient);
enableFilter(DatabaseFilter.ID_CLIENT_BY_USER, DatabaseFilter.ID_CLIENT_PARAM_NAME, idClient);
}
}
private void enableFilter(String filterName, String filterParamName, Long filterValue) {
Filter filterUser = entityManager.unwrap(Session.class).enableFilter(filterName);
filterUser.setParameter(filterParamName, filterValue);
}
}
我也试着像这样注入会话:
@Autowired
private EntityManager entityManager;
似乎HttpSession和我的方面没有在引起问题的同一个线程中执行。
所以我有两个问题: - 有没有办法获得方面的会话信息?怎么样?
我正在使用春季靴子。
提前谢谢。