我正在尝试了解Struts2拦截器。如果我的问题很愚蠢,请原谅。
我猜这些拦截器特定于一个动作类(这意味着在调用一个特定的动作类之前,它们会被调用)。
例如:
<action name="test" class="com.jranch.Test">
<interceptor-ref name="GuiStack”/>
<result name="success">/secure.jsp</result>
</action>
我的问题是:假设必须保护网站中的图片免受未经授权的访问(如果用户直接在浏览器中输入URL,则不应允许他们在登录前查看图片)。
我的观点是,如果它与Servlet过滤器相关,我可以通过将 url-pattern标记放到/ *来检查所有请求来编写一个简单的过滤器。 Struts2拦截器可以处理这个,因为我猜它们是特定于动作类的吗?
如果我错了,请纠正我。
答案 0 :(得分:1)
拦截器不一定特定于某个动作 - 实际上,在大多数情况下,它们适用于所有动作或全局动作(非常类似于servlet过滤器)。
这篇answer讨论了如何在Struts2应用程序中使用拦截器进行身份验证。
答案 1 :(得分:1)
您正在谈论的用例可以由Interceptor处理,对于特定资源的每个请求都可以首先被拦截器拦截,并且基于允许访问的自定义标准,我们可以将请求转发到调用堆栈或者可以拒绝请求。
public String intercept (ActionInvocation invocation) throws Exception {
final ActionContext context = invocation.getInvocationContext ();
Map<String, Object> session = ActionContext.getContext().getSession();
Object user = session.getAttribute (USER_HANDLE);
if (user == null) {
//Any processing
return "login"; //User is not logged in so ask him/her to login
} else {
return invocation.invoke (); //user is trusted one let her go ahead
}
}