【问题标题】:Tomcat authentication for subsequent access后续访问的Tomcat认证
【发布时间】:2015-12-06 06:47:56
【问题描述】:

我正在尝试模拟身份验证 (BASIC) 在 Tomcat 中是如何发生的,问题是当我第二次尝试获取资源时,它不要求输入密码并直接在我的浏览器上显示资源。如何为每个请求强制弹出登录窗口?

下面是我正在使用的 Servlet 代码。

import java.io.IOException;
import java.io.PrintWriter;
import java.util.Enumeration;

import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

//import org.apache.tomcat.util.buf.Base64;

public class TestServlet extends HttpServlet {

    private static final long serialVersionUID = 1L;

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws IOException {
        response.setContentType("text/html");
        PrintWriter out = response.getWriter();
        out.println("This is the Test Servlet");

        Enumeration headerNames = request.getHeaderNames();
        while (headerNames.hasMoreElements()) {
            String headerName = (String) headerNames.nextElement();
            out.print("<br/>Header Name: <em>" + headerName);
            String headerValue = request.getHeader(headerName);
            out.print("</em>, Header Value: <em>" + headerValue);
            out.println("</em>");
        }

        out.println("<hr/>");
        String authHeader = request.getHeader("authorization");
        String encodedValue = authHeader.split(" ")[1];
        //out.println("Base64-encoded Authorization Value: <em>" + encodedValue);
        //String decodedValue = Base64.base64Decode(encodedValue);
        //out.println("</em><br/>Base64-decoded Authorization Value: <em>" + decodedValue);
        out.println("</em>");
    }

}

以及我的 web.xml 的一部分,其中包含角色和用户

    <role rolename="tomcat"/>   
<user username="tomcat" password="tomcat" 
roles="tomcat"/>   <user username="myname" password="mypassword" roles="tomcat"/>   <user username="test" password="test"/>
    </tomcat-users>

PS:我知道它不是很好的身份验证方式,但我需要知道它有效,然后我才能探索 ssl 身份验证。

【问题讨论】:

标签: java tomcat authentication servlets web-applications


【解决方案1】:

您可以在每次通话后清除会话(doGet() 方法的最后一行):

request.getSession().invalidate();

【讨论】:

    猜你喜欢
    • 2015-05-15
    • 2010-11-19
    • 1970-01-01
    • 2013-04-18
    • 2015-09-22
    • 1970-01-01
    • 1970-01-01
    • 2016-08-14
    • 1970-01-01
    相关资源
    最近更新 更多