1

我有使用 JSP 的 Spring 应用程序。我需要重定向一页,但只需要一次。这是由于 spring 安全性 - 一旦用户访问此页面,我需要调用重定向以将他注销,但要留在同一页面上。有什么办法,只能通过java、html或js来做到这一点吗?或者也许我问错了 - 一定有某种方法,如何做到这一点,但我不是很喜欢前端技术,所以我很高兴,如果有人可以发布一些代码来告诉我,如何做到这一点工作..谢谢:)

所以用例:用户输入 mywebsite.com/login -> 如果他已经登录,我需要调用重定向以将他注销 -> 应该出现相同的站点,但现在没有重定向。

PS:我无法将用户重定向到另一个站点 - 它必须是具有相同源代码的同一个站点。

4

2 回答 2

0

如果我了解您的用例,我宁愿注销用户作为登录操作的一部分(即排除注销过程,并从注销操作和登录操作中调用它)。

如果这不可行(而且我没有理由不这样做),我将专注于“如果他登录则重定向”部分而不是“仅重定向一次”部分 - 前者很容易检查假设您正在使用某种会话来跟踪登录状态,几乎不需要对您的代码进行任何修改。

免责声明:我对 Sprint 几乎一无所知,这些都是非常笼统的评论,应该适用于任何经典的 web 应用程序。

于 2013-03-22T05:33:13.987 回答
-1

您可以使用过滤器。

@Override
    public void doFilter(ServletRequest arg0, ServletResponse arg1, FilterChain arg2) throws IOException, ServletException {
            HttpServletRequest test1=    (HttpServletRequest) arg0;

         test1.getRequestURL()); it gives  http://localhost:8081/applicationName/menu/index.action
         test1.getRequestURI()); it gives applicationName/menu/index.action
         String pathname = test1.getServletPath()); it gives //menu/index.action


        if(pathname.equals("//menu/index.action")){ 
            arg2.doFilter(arg0, arg1); // call to urs servlet or frameowrk managed controller method


            // in resposne 
           HttpServletResponse httpResp = (HttpServletResponse) arg1;
           RequestDispatcher rd = arg0.getRequestDispatcher("another.jsp");  redirect to another page at response time 
           rd.forward(arg0, arg1);





    }

不要忘记 <dispatcher>FORWARD</dispatcher>在 web.xml 中放入过滤器映射如果您不想使用过滤器,您可以从 urs 控制器方法重定向到另一个 jsp。

于 2013-03-22T05:34:33.133 回答