如何在spring服务类中创建会话?

时间:2016-11-05 11:27:11

标签: java spring session

我需要在setVechicleName(String vehicleName) { this.vehicleName = vehicleName; } Spring类中创建会话对象。在服务类中只有一种方法:

@Service

public UserDetails loadUserByUsername(String username) throws UsernameNotFoundException { User user=appServiceManager.getUser(username); 方法将不再接受额外的参数 - 除了loadUserByUsername,因为它是由预定义的类调用。

我想在会话中保留用户详细信息。

如何在我的服务类中获取会话?

1 个答案:

答案 0 :(得分:0)

session对象与表示(View)层相关,因此将会话对象传递给服务层并不是最佳实践,而是需要在控制器本身中处理它。

如果您处理服务层中的sessionview相关对象,您最终会将服务层(业务逻辑)与表示层紧密耦合,这将是一个问题,因为服务层的整体目标是与不同的端点(如控制器,不同的Web服务等)松散耦合。

因此,您可以在控制器层中将userdetails添加到Httpsession中,如下所示:

@Controller 
public class UserDetailsController {

  public R method1(HttpSession session, UserDetailsBean bean) {

     session.addAttribute("USERDETAILS", bean);

     //you can use UserDetailsBean object anywhere until you remove from session
  }
}

如果您使用spring-security,则可以轻松获取控制器中的userdetails,如下所示:

UserDetails userDetails = SecurityContextHolder.getContext().getAuthentication().getDetails();

您可以查找API here