我正在使用Java中非常简单的httpServer来构建支持GET、POST、PUT和DELETE方法的API REST。我使用基本身份验证,并有一些类(Authentication.java和Authorisation.java)用于验证用户身份和检查权限。
现在,我想让所有已认证的用户都能够从我的API REST中获取信息,但只允许具有某些特权的用户进行POST、PUT和DELETE操作。那么,我该怎么做呢?
这就是我所拥有的内容。
public class Server {
private static HttpServer server;
public static void start() throws IOException {
server = HttpServer.create(new InetSocketAddress(8000), 0);
HttpContext ctx = server.createContext("/users", new UserHandler());
ctx.setAuthenticator(new ApiRestBasicAuthentication("users"));
server.start();
}
}
这是我的ApiRestBasicAuthentication。
public class ApiRestBasicAuthentication extends BasicAuthenticator {
private UserAuthentication authentication = new UserAuthentication();
public ApiRestBasicAuthentication(String realm) {
super(realm);
}
@Override
public boolean checkCredentials(String user, String pwd) {
int authCode = authentication.authenticate(user, pwd);
return authCode == UserAuthentication.USER_AUTHENTICATED;
}
}
目前,check credentials仅检查用户是否已通过身份验证。但是,如果请求方法为POST、DELETE或PUT的话,我也想检查特定的凭据。但我应该如何在我的ApiRestBasicAuthentication中获取方法?我是在我的处理程序类中进行操作。
public void handle(HttpExchange httpExchange) throws IOException {
String method = httpExchange.getRequestMethod();
if ("post".equalsIgnoreCase(method)) {
createUser(httpExchange);
} else if ("get".equalsIgnoreCase(method)) {
readUsers(httpExchange);
} else if ("put".equalsIgnoreCase(method)) {
updateUser(httpExchange);
} else if ("delete".equalsIgnoreCase(method)) {
deleteUser(httpExchange);
}
}
也许这个应该用其他的方式完成。你有什么想法吗?非常感谢。
spring-security
。请参考以下答案:https://dev59.com/kms05IYBdhLWcg3wQvuq#45965232 - Ortwin Angermeier