Java 在我的服务层中传递HTTPServlet响应是一种糟糕的做法吗?
在authenticationService的登录方法中,我需要创建一个cookie并在cookie中设置会话ID 在控制器操作中将请求对象传递给我的服务层是一种错误的做法吗Java 在我的服务层中传递HTTPServlet响应是一种糟糕的做法吗?,java,spring,servlets,spring-mvc,Java,Spring,Servlets,Spring Mvc,在authenticationService的登录方法中,我需要创建一个cookie并在cookie中设置会话ID 在控制器操作中将请求对象传递给我的服务层是一种错误的做法吗 public void login(String email, String password) { User user = someService.validate(email, password); if(user != null) { // create session //
public void login(String email, String password) {
User user = someService.validate(email, password);
if(user != null) {
// create session
// set cookie ????
}
}
我的控制器操作将调用上面的登录方法,我不知道应该在哪里为我的cookie创建和设置会话id
对我来说,将其放在服务层是有意义的,但随后我的登录方法被紧密地绑定到web应用程序
我这样做对吗?是的。尽可能快地将网络消息转换为域对象,在确定整个消息的格式正确且经过授权之前,不要采取任何行动 如果您能够将处理混乱的不可信输入的代码与实现业务规则的代码隔离开来,并根据域对象执行更改,与格式化对外部世界的响应的代码隔离开来,那么您的代码将更易于维护和安全 如果您可以将您的服务分为:
这样,即使cookie不存在,也可以使用该服务,如桌面或CLI应用程序。它还允许在根本不考虑web层的情况下测试服务,这很有意义——服务不关心身份验证是如何发生的,或者之后会发生什么——只关心使用用户名和密码的工作方式。因此,一旦用户通过身份验证,会话就必须写入数据库,服务层不应该这样做吗?还是和饼干一样?那么这应该在控制器中的什么位置?@Blankman不确定为什么必须将会话或会话ID写入数据库,但您的应用程序可能需要这样做。我想大多数人不会,但这要看情况而定。在任何情况下,服务都应该从控制器获得会话ID,并且仍然与web层保持解耦。+1假定的“多层”体系结构直接通过每一层与web耦合,这是一个巨大的麻烦!