我已经阅读了与此主题相关的几个问题(Jersey REST API as a separate web app,Should web service be separate from web site?),但我仍然很难理解哪种设计方法最适合现有应用。
我继承了一个基于spring和hibernate JPA构建的java web应用程序。它目前正在开发中,正在开发新功能。
同时,我需要设计一个REST API,它将具有某种形式的身份验证/用户跟踪。 Web应用程序有自己的用户身份验证系统,可能与API实现不同(即用户名/ pw vs api密钥(?))。
鉴于这种情况,我认为最好单独开发它们,但我觉得在开始时,会有很多代码重复(由于Web应用程序中的所有jpa实现)。理想情况下,一旦我有其余的API,我就会切换Web应用程序以使用API并删除当前处理数据检索的大部分后端代码。
在我开始沿着这条路走之前,我想知道,有没有更好的方法呢?
答案 0 :(得分:0)
您可以使用Spring Security并创建自定义AuthenticationProvider。您可以使用JNDI查找直接从Container自己获取authservice。
示例:
@Component
public class CustomAuthenticationProvider implements AuthenticationProvider {
@Autowired
private AuthService authService;
public Authentication authenticate(Authentication authentication)
throws AuthenticationException {
String name = authentication.getName();
String password = authentication.getCredentials().toString();
// use the credentials to try to authenticate against the third party system
if (authService(name, password)) {
List<GrantedAuthority> grantedAuths = new ArrayList<>();
return new UsernamePasswordAuthenticationToken(name, password, grantedAuths);
} else {
throw new AuthenticationException("Unable to auth against third party systems");
}
}
@Override
public boolean supports(Class<?> authentication) {
return authentication.equals(UsernamePasswordAuthenticationToken.class);
}
另外,请在此处阅读有关使用Spring的RESTful apis的更多信息: