Как реализовать базовую аутентификацию Jax-RS? - PullRequest
0 голосов
/ 04 мая 2018

Как реализовать базовую аутентификацию и авторизацию JAX-RS для каждого запроса? Я делаю следующие шаги.

  1. принимает имя пользователя и пароль от @HeaderParam
  2. расшифровка
  3. После аутентификации установите уникальный токен в заголовке ответа. до этого шага работает нормально.

Но как я могу проверить пользователя на новый запрос? Для нового запроса @HeaderParam("Authorization") является нулевым.

Мой код

@GET
@Path("/login")
public Response login(@HeaderParam("Authorization") String authString){
    String reponseHeader="";
    String reponseHeaderValue="";
    int errorCode=0;
    try{
        if(authString!=null){
            System.out.println("#########" + authString);
            String[] authParts = authString.split("\\s+");
            String authInfo = authParts[1];
            // Decode the data back to original string
            byte[] bytes = new BASE64Decoder().decodeBuffer(authInfo);
            String decodedAuth = new String(bytes);
            System.out.println(decodedAuth);
           String[] credentials = decodedAuth.split(":");
            UserAuthentication userAuthentication = getService(UserAuthentication.class);
            if(userAuthentication == null)
                throw new UserAuthenticationException("Unable to get UserAuthentication Service");
            String userName = credentials[0];
            String pwd =   credentials[1];
            LoginSession obj_Session = userAuthentication.authenticateUser(userName,pwd);
            sessionCount = sessionCount + 1;
            String strSessionKey = userName  + "_" + sessionCount + "";
            reponseHeaderValue="Basic "+strSessionKey;
            reponseHeader="Authorization:";
            errorCode=200;
        }else{
            reponseHeaderValue="User Visible Realm";
            reponseHeader="WWW-Authenticate: Basic realm=";
            errorCode=401;
        }
    }catch(Exception ex){
        ex.printStackTrace();
    }
    return Response.ok().header(reponseHeader, reponseHeaderValue).status(errorCode).build();
}

Так я аутентифицирую пользователя. Как только он будет аутентифицирован для следующего запроса, т.е.

@GET
@Path("/")
@Produces(MediaType.APPLICATION_JSON + ";charset=utf-8")
@Consumes(MediaType.APPLICATION_JSON + ";charset=utf-8")
public String getProjectList(@HeaderParam("Authorization") String authString){
    System.out.println("##############"+authString);
    System.out.println("##############");
    return authString;
}

Но @HeaderParam("Authorization") - ноль, поэтому я не могу авторизовать пользователя.

...