有没有一种方法可以在播放框架中的拦截器和操作之间共享数据?

问题描述:

在玩!控制器,我可以创建一个interceptor method,它将在每个请求到达适当的操作之前处理它。有没有一种方法可以在播放框架中的拦截器和操作之间共享数据?

public class Admin extends Application { 

    @Before 
    static void checkAuthentification() { 
     if(session.get("user") == null) login(); 
     // otherwise, 
     User loggedOnUser = User.find("byUsername", session.get("user")); 
    } 

    public static void index() { 
     // any way to access loggedOnUser ? 
     List<User> users = User.findAll(); 
     render(users); 
    } 
    … 
} 

有没有办法在拦截器中设置一个值并在action中进行访问?有点像servlet中的request.setAttribute()

拦截器和操作共享相同的请求上下文(请求,响应,会话等)。如上所述,您可以选择使用renderArgs,但请记住,这些值将在您的视图中可用,这可能不是您想要的。如果你想保持拦截器和动作之间的状态,只需使用request.args散列即可。

您可以使用Controller中的renderArgs参数(请参阅here),或者您可以将值存储在缓存中(我们可以假定该值是在毫秒前添加的,您的值在同一请求中可用)。

+0

嘿,那是一个脆弱的环节。 – itsadok

+0

@itsadok是,短期参考:P –