在Spring 3中作为会话确定侦听器的范围会引发异常

时间:2015-03-09 18:57:27

标签: java spring spring-security

如何使用会话范围确定侦听器的范围?我需要为每个连接的用户执行此侦听器,但是当我尝试范围它时,抛出下一个异常

范围'会话'当前线程不活动;考虑为这个bean定义一个范围代理,如果你想从一个单例引用它;嵌套异常是java.lang.IllegalStateException:找不到线程绑定请求:您是指在实际Web请求之外的请求属性,还是在最初接收线程之外处理请求?如果您实际上是在Web请求中操作并仍然收到此消息,则您的代码可能在DispatcherServlet / DispatcherPortlet之外运行:在这种情况下,请使用RequestContextListener或RequestContextFilter来公开当前请求。

我在我的web.xml中包含了这个,但没有

 <listener>
    <listener-class>org.springframework.web.context.request.RequestContextListener</listener-class>
</listener> 

如果需要,这是听众

public class ReauthenticatingEventsPostProcessor implements    ApplicationListener<ReauthenticatingUseronRoleChangeEvent> {

    @Autowired
    @Qualifier("userDao")
    UserDAO userDao;

    @Override
    public void onApplicationEvent(ReauthenticatingUseronRoleChangeEvent e) {
        Authentication auth = SecurityContextHolder.getContext().getAuthentication();
        List<GrantedAuthority> authorities = new ArrayList<GrantedAuthority>  (auth.getAuthorities());
        Role r = new Role();
        r.setRole(e.getRoleType());
        authorities.add(r);
        Authentication newAuth = new UsernamePasswordAuthenticationToken(auth.getPrincipal(), auth.getCredentials(), authorities);
        SecurityContextHolder.getContext().setAuthentication(newAuth);
    }
}

0 个答案:

没有答案