Браузер не запрашивает учетные данные, используя обычную аутентификацию - PullRequest
0 голосов
/ 24 мая 2019

Моя цель - предоставить аутентификацию одному ресурсу на сервере, для этого я использую пользовательский фильтр.Я не использую @NameBinding из-за ограничений использования JAVA 1.6. Использование Response.header(HttpHeaders.WWW_AUTHENTICATE,"Basic") не запрашивает учетные данные.

Использование ContainerRequestFilter не помогает моему делу, так как оно налагает фильтр на каждый ресурс сервера.

Filter

@Provider
public class AuthenticationFilter implements Filter {

    @Override
    public void doFilter(ServletRequest req, ServletResponse resp,
            FilterChain chain) throws IOException, ServletException {

        HttpServletRequest request = (HttpServletRequest) req;

        System.out.println("Entered authentication filter");

        throw new WebApplicationException(Response.status(Response.Status.UNAUTHORIZED)
                .header(HttpHeaders.AUTHORIZATION,"Basic")
                .entity("Credentials are required to access this resource.")
                .build());

//      chain.doFilter(req, resp);

    }

    @Override
    public void init(FilterConfig arg0) throws ServletException {}

    @Override
    public void destroy() {}
}

web.xml mapping

<filter>
    <filter-name>AuthenticationFilter</filter-name>
    <filter-class>Utils.LDAPAuthentication.AuthenticationFilter</filter-class>
  </filter>
  <filter-mapping>
    <filter-name>AuthenticationFilter</filter-name>
    <url-pattern>/download</url-pattern>
  </filter-mapping>

Ответ на веб-сервис, который я получаю, - enter image description here

1 Ответ

0 голосов
/ 30 мая 2019

Итак, как предположил Павел, я использовал HttpServletResponse.

HttpServletRequest request = (HttpServletRequest) req;
HttpServletResponse response = (HttpServletResponse) resp;
if(request.getHeader("Authorization")==null){
    response.setHeader(HttpHeaders.WWW_AUTHENTICATE,"Basic");
    response.setStatus(HttpServletResponse.SC_UNAUTHORIZED);
}
else{
    String credentials = request.getHeader("Authorization");
}   
...