Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/371.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/design-patterns/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/reactjs/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java HttpServletRequest.authenticate不要求重新登录_Java_Servlet 3.0 - Fatal编程技术网

Java HttpServletRequest.authenticate不要求重新登录

Java HttpServletRequest.authenticate不要求重新登录,java,servlet-3.0,Java,Servlet 3.0,按照预期使用以下代码和默认配置(glassfish 3.1.2中的HTTP基本身份验证+文件域),客户端将被要求提供凭据。但是,在刷新后,甚至在浏览器中的新选项卡上(即使不允许cookies,也不存储密码),客户端不再被要求重新输入凭据。只有当浏览器关闭并重新打开时,才会再次要求客户端提供凭据。你是怎么做到的 public class AuthenticateServlet extends HttpServlet { protected void processRequest(Http

按照预期使用以下代码和默认配置(glassfish 3.1.2中的HTTP基本身份验证+文件域),客户端将被要求提供凭据。但是,在刷新后,甚至在浏览器中的新选项卡上(即使不允许cookies,也不存储密码),客户端不再被要求重新输入凭据。只有当浏览器关闭并重新打开时,才会再次要求客户端提供凭据。你是怎么做到的

public class AuthenticateServlet extends HttpServlet {

    protected void processRequest(HttpServletRequest request,
            HttpServletResponse response)
            throws ServletException, IOException {
        response.setContentType("text/html;charset=UTF-8");
        PrintWriter out = response.getWriter();
        try {
            request.authenticate(response);
            out.println("Authenticate Successful");
        } finally {
            request.logout();
            out.close();
        }
    }

[...]

}
问候,

迈克

-编辑-

这个问题是在试验使用编程安全性的方法时提出的。在重新启动的客户端浏览器中使用以下代码时,第一条println语句会引发NPE。登录窗口甚至不会出现在客户端浏览器中。然而,当println-语句被删除时,登录窗口确实会出现,并且登录工作正常。然后再次添加println语句(并且不重新启动浏览器)时,将打印它们。我还试图将println语句移动到另一个try/catch-block中,但这似乎没有什么不同

    try {
        request.authenticate(response);

        out.println("<p>Principal's name: " + request.getUserPrincipal().getName() + "</p>");     <== NPE
        out.println("<p>is that user in role 'gruppeA': " + request.isUserInRole("a_gruppe") + "</p>");
        out.println("<p>remote User is: " + request.getRemoteUser() + "</p>");
        out.println("Authenticate Successful");
    } catch (ServletException ex) {
        out.println("Login Failed with a ServletException." + ex.getMessage());
        return;
    } finally {
        out.close();
    }
试试看{
请求、认证(响应);

out.println(“主体的名称:“+request.getUserPrincipal().getName()+”

”);身份验证凭据被缓存在某个地方,看起来它是基于会话的。 您可以在服务器中检查清除会话的方法,但也可以在/clear处绑定一些servlet并调用request.getSession().invalidate()

我认为缓存凭证是相当标准的,有时浏览器也会这样做,您的特定用例是什么