使用servlet在Java EE应用程序中记录用户

时间:2012-07-24 05:34:25

标签: authentication java-ee jsf-2 glassfish-3

使用this回答我尝试退出。

Servlet代码:

@WebServlet(name = "LogoutServlet", urlPatterns = {"/logout"})
public class LogoutServlet extends HttpServlet {
    private static org.apache.log4j.Logger logger = org.apache.log4j.Logger.getLogger(user.class);

    @Override
    protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        // Destroys the session for this user.
        if (request.getSession(false) != null) {
            request.getSession(false).invalidate();
        }

        // Redirects back to the initial page.
        logger.warn(request.getContextPath());
        response.sendRedirect(request.getContextPath());

    }
}

查看代码:

<h:form>
      <h:commandButton value="Logout" action="/logout"/>
</h:form>

错误:

Unable to find matching navigation case with from-view-id '/Admin/appManager.xhtml' for action '/logout' with outcome '/logout'

我不认为servlet正在接受&#34; / logout&#34;网址模式。我做错了什么?

1 个答案:

答案 0 :(得分:1)

在JSF中,action不是要调用的下一个servlet的URL。而不是通过faces-config或直接从支持bean定义导航规则。

该消息告诉您,您的应用与logout页面中的操作.xhtml不匹配。

我会做像

这样的事情
<h:commandButton value="Logout" action="#{backingBean.logout()}"/> 

您使用方法ManagedBean获得BackingBean logout(),并将网址返回“再见”地址。

注意:如果要从servlet执行操作,则应使用常规html标记(<a><button>而不是JSF组件)链接到它。

相关问题