在 Confluence v5.8.5 中使用 xwork 覆盖默认包
overriding default package using xwork in Confluence v5.8.5
我需要覆盖 default 包的 login 操作。以前我使用 Confluence 传送带插件 来覆盖操作,但无法通过 版本控制问题。
覆盖
不知何故,我使用 xwork 来覆盖某些操作,但不知道如何覆盖默认包的任何操作。
这是我的代码...
<xwork name="XWork Create" key="xwork-create">
<package name="default" extends="default">
<interceptor-ref name="validatingStack"/>
<action name="login" class="com.atlassian.confluence.user.actions.LoginAction" method="doDefault">
<result name="input" type="velocity">/templates/plugin/login.vm</result>
</action>
</package>
<package name="users" extends="default" namespace="/users">
<default-interceptor-ref name="defaultStack" />
<action name="viewmyprofile" class="in.atlassian.confluence.plugin.Login">
<result name="success" type="velocity">/templates/plugin/login.vm</result>
</action>
</package>
</xwork>
我会使用 servlet 过滤器来覆盖默认行为
<servlet-filter name="Login Filter" key="loginFilter"
class="com.example.confluence.plugins.xxx.servlet.filter.LoginFilter"
location="before-dispatch"
weight="10000">
<url-pattern>/login.action*</url-pattern>
<url-pattern>/dologin.action*</url-pattern>
<dispatcher>REQUEST</dispatcher>
<dispatcher>FORWARD</dispatcher>
</servlet-filter>
然后使用 com.example.confluence.plugins.xxx.servlet.filter.LoginFilter
重定向到另一个 servlet 或 xwork 操作。
也许是这样的:
public class LoginFilter implements Filter
{
public void init(FilterConfig config) {}
public void doFilter(ServletRequest request,
ServletResponse response,
FilterChain filterChain) throws IOException, ServletException {
try {
((HttpServletResponse)response).sendRedirect("/path/to/your.action");
} catch (IOException e) {
// log.error(" ++ Couldn't redirect: " + e.getMessage());
filterChain.doFilter(request, response);
}
}
public void destroy() {}
}
Thsi 的优势在于不依赖 Conveyor,我敢肯定它的作者 David Peterson 或 ServiceRocket 不再支持它。
通过用 "loginDefault" 替换包名以某种方式完成...
忘了回答...
我需要覆盖 default 包的 login 操作。以前我使用 Confluence 传送带插件 来覆盖操作,但无法通过 版本控制问题。
覆盖不知何故,我使用 xwork 来覆盖某些操作,但不知道如何覆盖默认包的任何操作。
这是我的代码...
<xwork name="XWork Create" key="xwork-create">
<package name="default" extends="default">
<interceptor-ref name="validatingStack"/>
<action name="login" class="com.atlassian.confluence.user.actions.LoginAction" method="doDefault">
<result name="input" type="velocity">/templates/plugin/login.vm</result>
</action>
</package>
<package name="users" extends="default" namespace="/users">
<default-interceptor-ref name="defaultStack" />
<action name="viewmyprofile" class="in.atlassian.confluence.plugin.Login">
<result name="success" type="velocity">/templates/plugin/login.vm</result>
</action>
</package>
</xwork>
我会使用 servlet 过滤器来覆盖默认行为
<servlet-filter name="Login Filter" key="loginFilter"
class="com.example.confluence.plugins.xxx.servlet.filter.LoginFilter"
location="before-dispatch"
weight="10000">
<url-pattern>/login.action*</url-pattern>
<url-pattern>/dologin.action*</url-pattern>
<dispatcher>REQUEST</dispatcher>
<dispatcher>FORWARD</dispatcher>
</servlet-filter>
然后使用 com.example.confluence.plugins.xxx.servlet.filter.LoginFilter
重定向到另一个 servlet 或 xwork 操作。
也许是这样的:
public class LoginFilter implements Filter
{
public void init(FilterConfig config) {}
public void doFilter(ServletRequest request,
ServletResponse response,
FilterChain filterChain) throws IOException, ServletException {
try {
((HttpServletResponse)response).sendRedirect("/path/to/your.action");
} catch (IOException e) {
// log.error(" ++ Couldn't redirect: " + e.getMessage());
filterChain.doFilter(request, response);
}
}
public void destroy() {}
}
Thsi 的优势在于不依赖 Conveyor,我敢肯定它的作者 David Peterson 或 ServiceRocket 不再支持它。
通过用 "loginDefault" 替换包名以某种方式完成... 忘了回答...