Spring-Aop获取session
第一种获取session方式
ServletRequestAttributes attr = (ServletRequestAttributes) RequestContextHolder.currentRequestAttributes();
HttpSession session = attr.getRequest().getSession(true);
User user = (User) session.getAttribute("user");
这种方式会引发一个错误,错误消息如下:
java.lang.IllegalStateException: No thread-bound request found: Are you referring to request attributes outside of an actual web request, or processing a request outside of the originally receiving thread? If you are actually operating within a web request and still receive this message, your code is probably running outside of DispatcherServlet/DispatcherPortlet: In this case, use RequestContextListener or RequestContextFilter to expose the current request.
解决方式如下:
在web.xml中添加一个监听
<listener>
<listener-class>
org.springframework.web.context.request.RequestContextListener
</listener-class>
</listener>
</web-app>
第一种获取session方式
public Object around(ProceedingJoinPoint joinPoint)
{
HttpServletRequest request=null;
for(int i=0;joinPoint.getArgs().length;i++){
if((joinPoint.getArgs()[i] instanceof HttpServletRequest)){
request=(HttpServletRequest )joinPoint.getArgs()[i];
}
}
if(request!=null){
if(request.getSession()!=null){
User user=(User)request.getSession().getAttribute("user");
if(user==null){
return joinPoint.proceed();
}
业务操作
}
}
return joinPoint.proceed();
}