프로젝트에 사람이 로그 아웃 할 때 호출되는 서블릿이 있습니다.Struts2에서 로그 오프 한 후 요청을 리디렉션하는 방법
public class LogonServlet extends HttpServlet {
private static final long serialVersionUID = -4899047924930198118L;
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
setFirmAndRedirect(request, response);
}
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
setFirmAndRedirect(request, response);
}
private void setFirmAndRedirect(HttpServletRequest request,
HttpServletResponse response) throws ServletException, IOException {
String firm;
String serverPath = request.getServletPath();
firm = serverPath.replaceAll("/", "").replaceAll(".logon", "").trim()
.toLowerCase();
request.setAttribute("firm", firm);
RequestDispatcher dispatcher = request.getRequestDispatcher("/logon.do");
dispatcher.forward(request, response);
}
}
서블릿은 요청을 struts의 logon.do 작업으로 전달하려고 시도합니다. 다음 내 web.xml 파일입니다 :
LogonServlet은 다음 struts.xml 당 로그 아웃 요청을 제공하는 데 사용됩니다<web-app>
<context-param>
<param-name>org.apache.tiles.impl.BasicTilesContainer.DEFINITIONS_CONFIG</param-name>
<param-value>/WEB-INF/tiles-defs.xml</param-value>
</context-param>
<filter>
<filter-name>HibernateSessionFilter</filter-name>
<filter-class>com.rolfeandnolan.ccp.filters.HibernateSessionFilter</filter-class>
</filter>
<!-- Struts 2 -->
<filter>
<filter-name>struts2</filter-name>
<filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>
</filter>
<!-- Should only apply to Alerts Direct requests -->
<filter-mapping>
<filter-name>HibernateSessionFilter</filter-name>
<url-pattern>*.do</url-pattern>
</filter-mapping>
<filter-mapping>
<filter-name>struts2</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<servlet>
<servlet-name>logon</servlet-name>
<servlet-class>com.rolfeandnolan.ccp.servlets.LogonServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>logon</servlet-name>
<url-pattern>*.logon</url-pattern>
</servlet-mapping>
:
전달에<action name="logoff"
class="com.rolfeandnolan.ccp.struts.actions.LogoffAction">
<param name="allowedRoles">admin,margin,alerts,limitadmin,workfloweditor,eval,theocalc,stress,alertscustomer,useradmin</param>
<result name="success">/logon.jsp</result>
<result name="firmlogon" type="dispatcher">
<param name="location">${firm}.logon</param>
</result>
</action>
, 그것은 404 오류를주고있다 :
를HTTP 상태 404 - /ccpserver/logon.do 유형 상태 보고서 message /ccpserver/logon.do 설명 요청한 리소스 (/ccpserver/logon.do)를 사용할 수 없습니다. 제이보스 웹/2.1.3.GA
직접 URL http://localhost:8080/ccpserver/logon.do
를 치는 동안, 그것은 잘 작동합니다.
이 솔루션은 저에게 효과적 이었지만 여전히 서블릿에서 앞으로 작동하지 않는 이유를 알 수는 없습니다. – Prashant
서블릿으로 전달하면 안됩니다. http://stackoverflow.com/a/31483491/573032를 참조하십시오. –