我正在开发一个现有代码库的Web应用程序,可能已经存在了10年,有大约1000个类文件和大约100,000行代码.好消息是代码组织良好,业务逻辑与控制器域分离,并且具有高度的可重用性.坏消息是只有测试套件的开头(JUnit); 最多可能有12打测试.
代码通常用于企业Java项目.有一个stuts-esque控制器包,该模型几乎完全由数据对象组成,有一个类似于数据库层的hibernate,主要封装在数据访问对象中,还有一些简单,自包含和逻辑的服务包.构建此测试套件的最终目标是实现持续集成开发过程.
欢迎任何建议.谢谢!
我已经开始使用JAX-RS为我的Web应用程序创建一个简单的restful接口.目前,它只被一个内部客户端使用(只读),该客户端可以访问所有应用程序数据,我使用http基本身份验证进行访问.我想开始使用它作为我的应用程序的视图层的一部分,并且只有当用户通过Web应用程序登录时才允许某些操作.我正在努力寻找一种模式,允许我以优雅的方式使用两种形式的身份验证,而无需重复大量代码.这大致是我提出的:
首先是一个用于加载应用程序会话的util类,它存储在数据库中.
public class RestUtil {
public static AppSession getAuthenticatedSession(HttpServletRequest request) {
AppSession session;
String remoteUser = request.getRemoteUser();
if (remoteUser != null) {
session = SessionRepository.loadSessionByRemoteUser(remoteUser);
} else {
session = SessionRepository.loadSessionById(request.getSession().getId());
}
return session;
}
}
Run Code Online (Sandbox Code Playgroud)
这是我们的资源,只有一个方法只能由经过身份验证的用户访问,或者我们的http基本身份验证客户端:
@Path("/protected/resource")
public class ProtectedResource {
@GET
@Produces(MediaType.TEXT_JSON)
@Path("{userId}")
public String getProtectedResourceJson(@Context HttpServletRequest request, @PathParam("userId") Integer userId) {
// Return Charity List XML
AppSession session = RestUtil.getAuthenticatedSession(request);
if (session.canAccessUser(userId)) //get Json...
}
}
Run Code Online (Sandbox Code Playgroud)
对于这个问题,这是AppSession的最基本视图:
public class AppSession {
User authenticatedUser;
String remoteUser;
public …Run Code Online (Sandbox Code Playgroud)