Java Web应用程序和请求身份验证
我目前有一个工作的网络应用程序,但我需要为朋友网站提供使用我的数据的手段 目前有一个JSON响应,它从我的网站向调用者检索一些数据。它目前没有身份验证,我想实现某种类型的每请求身份验证 我的web应用程序中有已登录的用户,并且有相应的身份验证。但是 我总共有3个请求,呼叫者可以从我的网站上获取数据,为这3个请求添加某种身份验证的最简单方法是什么Java Web应用程序和请求身份验证,java,json,authentication,playframework,Java,Json,Authentication,Playframework,我目前有一个工作的网络应用程序,但我需要为朋友网站提供使用我的数据的手段 目前有一个JSON响应,它从我的网站向调用者检索一些数据。它目前没有身份验证,我想实现某种类型的每请求身份验证 我的web应用程序中有已登录的用户,并且有相应的身份验证。但是 我总共有3个请求,呼叫者可以从我的网站上获取数据,为这3个请求添加某种身份验证的最简单方法是什么 我正在使用play framework+java,最好的选择是简单: 基本身份验证(因为可以选择一次身份验证,然后进行基于会话的用户识别,或者对每个请
我正在使用play framework+java,最好的选择是简单:
- 基本身份验证(因为可以选择一次身份验证,然后进行基于会话的用户识别,或者对每个请求进行授权)
- 双向SSL
- 两者的结合
@Restrict(value = @Group({"ROLE_WEB_SERVICE1"}), handler = BasicAuthHandler.class)
public static Result ws1() {
return TODO;
}
以及身份验证处理程序本身
public class BasicAuthHandler extends AbstractDeadboltHandler {
public static final String HEADER_PREFIX = "Basic ";
private static final String AUTHORIZATION = "authorization";
private static final String WWW_AUTHENTICATE = "WWW-Authenticate";
@Override
public Result beforeAuthCheck(final Http.Context context) {
return basicAuthenticate(context);
}
private Result basicAuthenticate(Http.Context context) {
if (PlayAuthenticate.isLoggedIn(context.session())) {
// user is logged in
return null;
}
final String authHeader = context.request().getHeader(AUTHORIZATION);
if (authHeader == null || !authHeader.toLowerCase().startsWith(HEADER_PREFIX.toLowerCase())) {
return onAuthFailure(context, "Basic authentication header is missing");
}
final String auth = authHeader.substring(HEADER_PREFIX.length());
final byte[] decodedAuth;
final String[] credentials;
try {
decodedAuth = Base64.base64ToByteArray(auth);
credentials = new String(decodedAuth, "UTF-8").split(":");
} catch (final IOException e) {
Logger.error("basicAuthenticate", e);
return Results.internalServerError();
}
if (credentials.length != 2) {
return onAuthFailure(context, "Could not authenticate with absent password");
}
final String username = credentials[0];
final String password = credentials[1];
final AuthUser authUser = new AuthUser(password, username);
final Enum result = AuthProvider.getProvider().loginUser(authUser);
if ("USER_LOGGED_IN".equals(result.name())) {
PlayAuthenticate.storeUser(context.session(), authUser);
return null;
}
return onAuthFailure(context, "Authenticate failure");
}
@Override
public Subject getSubject(final Http.Context context) {
// your implementation
}
@Override
public Result onAuthFailure(final Http.Context context,
final String content) {
// your error hangling logic
return super.onAuthFailure(context, content);
}
}
希望它能填补一些空白