【问题标题】:Using servlet to log user out in Java EE application使用 servlet 在 Java EE 应用程序中注销用户
【发布时间】:2012-07-22 09:47:29
【问题描述】:

使用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 不会使用“/logout” url 模式接收请求。我做错了什么?

【问题讨论】:

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


    【解决方案1】:

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

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

    我会做类似的事情

    <h:commandButton value="Logout" action="#{backingBean.logout()}"/> 
    

    你有一个 ManagedBean BackingBeanlogout() 方法,它将 URL 返回到“再见”地址。

    注意:如果要从 servlet 进行操作,则应使用常规 html 标签(&lt;a&gt;&lt;button&gt; 而不是 JSF 组件)链接到它。

    【讨论】:

    • 在所有页面中使用带注销方法的单个支持 bean 是否公平。我可能有很多页面,每个页面都调用相同的支持 bean 方法
    • 是的。在任何页面中,您都可以使用多个支持 bean;用于数据或操作。反过来,您可以使用任何页面中的任何 bean。
    • +1 有帮助 :) 你能提供带有 标签和 servlet 的简单示例吗?
    • 使用&lt;a&gt; 标记,就像它是纯 HTML 一样。实际上它只是 HTML 标签。
    • 刚找到h:outputLink,直接从JSF生成链接。如果您需要通过 EL 传递参数值,则需要。 marceloagustini.wordpress.com/2012/04/24/…
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-06-09
    • 1970-01-01
    • 2018-06-10
    • 1970-01-01
    相关资源
    最近更新 更多