проверка подлинности при входе в API Java Rest получает неподдерживаемый тип носителя - PullRequest
0 голосов
/ 28 июня 2018

В этом примере я пытаюсь взять параметры, отправленные пользователем Android во время входа в систему, для проверки подлинности пользователя, и в ответ я даю токен, но при проверке его на почтальоне я получаю Unsupported Media Type Error

Ниже приведен класс ApplicationConfig.java

package com.test;

import java.util.Set;
import javax.ws.rs.core.Application;

@javax.ws.rs.ApplicationPath("webresources")
public class ApplicationConfig extends Application {

@Override
public Set<Class<?>> getClasses() {
    Set<Class<?>> resources = new java.util.HashSet<>();
    addRestResourceClasses(resources);
    return resources;
}

/**
 * Do not modify addRestResourceClasses() method.
 * It is automatically populated with
 * all resources defined in the project.
 * If required, comment out calling this method in getClasses().
 */
private void addRestResourceClasses(Set<Class<?>> resources) {
     resources.add(com.test.AuthenticationEndpoint.class);
}

}

Ниже приведен класс AuthenticationEndpoint.java

 package com.test;

 import java.security.SecureRandom;
 import java.sql.Connection;
 import java.sql.DriverManager;
 import java.sql.PreparedStatement;
 import java.sql.ResultSet;
 import java.sql.SQLException;
 import java.sql.Statement;
 import javax.ws.rs.Consumes;
 import javax.ws.rs.POST;
 import javax.ws.rs.Path;
 import javax.ws.rs.PathParam;
 import javax.ws.rs.Produces;
 import javax.ws.rs.core.MediaType;
 import javax.ws.rs.core.Response;

 @Path("/authentication")
 public class AuthenticationEndpoint {
 String token=null;
@POST
@Path("/getData")
@Produces(MediaType.APPLICATION_JSON)
@Consumes(MediaType.APPLICATION_FORM_URLENCODED)
public Response authenticateUser(@FormParam("username") String username, 
                                 @FormParam("password") String password) {

    try {

        // Authenticate the user using the credentials provided
        authenticate(username, password);

        // Issue a token for the user
       // String token = issueToken(username);

        // Return the token on the response
        return Response.ok(token).build();

    } catch (Exception e) {
        return Response.status(Response.Status.FORBIDDEN).build();
    }      
}

private void authenticate(String username, String password) throws ClassNotFoundException, SQLException {
    // Authenticate against a database, LDAP, file or whatever
    // Throw an Exception if the credentials are invalid
     boolean status = false;
    credentials cred=new credentials();
    String user = cred.getUsername();
    String pass = cred.getPassword();       

    Connection conn = null;
    PreparedStatement pst = null;
    ResultSet rs = null;

  try {
  String sql="Select userid,password,area,designation from login";
  Class.forName("com.mysql.jdbc.Driver");
  Connection con=DriverManager.getConnection("jdbc:mysql://localhost:3306/databasename","root","");


  Statement st = con.createStatement();

        pst = conn
                .prepareStatement("select * from login where userid=? and password=?");
        pst.setString(1, user);
        pst.setString(2, pass);

        rs = pst.executeQuery();
        status = rs.next();

        if(status){
          token = issueToken(user);
    }

    } catch (Exception e) {
        System.out.println(e);
    } finally {
        if (conn != null) {
            try {
                conn.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
        if (pst != null) {
            try {
                pst.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
        if (rs != null) {
            try {
                rs.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }

}


}

private String issueToken(String username) {
    // Issue a token (can be a random String persisted to a database or a JWT token)
    // The issued token must be associated to a user
    // Return the issued token
   String user = username;
    SecureRandom random = new SecureRandom();
    byte bytes[] = new byte[20];
    random.nextBytes(bytes);
    String token = bytes.toString();


     Connection conn;
     Statement st;
     ResultSet rs=null;
     try {
     Class.forName("com.mysql.jdbc.Driver");

     conn=DriverManager.

     getConnection("jdbc:mysql://localhost:3306/basename","root","");

 st = conn.createStatement();
 String TableSQL = "UPDATE login SET token = ? WHERE userid = ?";
 PreparedStatement preparedStatement = conn.prepareStatement(TableSQL);
 preparedStatement.setString(1, token);
 preparedStatement.setString(2, user);
  // execute insert SQL stetement
 preparedStatement .executeUpdate();

}catch(Exception e){

}
 return token;
   }
   }

Ниже credentials.java класс

package com.test;

public class credentials {

private String username;
private String password;
private String area;
private String designation;

public String getUsername() {
    return username;
}

public void setUsername(String username) {
    this.username = username;
}

public String getPassword() {
    return password;
}

public void setPassword(String password) {
    this.password = password;
}
public String getArea() {
    return area;
}

public void setArea(String area) {
    this.area = area;
}

public String getDesignation() {
    return designation;
}

public void setDesignation(String designation) {
    this.designation = designation;
}

}
...