DropWizard Authenticator使用自己的Hibernate Session

时间:2015-10-14 15:05:25

标签: hibernate authentication dropwizard

我正在使用DropWizard,我有一个Authenticator,它加载了一个具有延迟实例化集合的User对象。在资源中我尝试访问这些集合但是我得到一个LazyInitilizationException报告没有会话 - 但我在一个会话中因为该方法是注释@UnitOfWork。

我可以通过在Resource方法中重新加载用户对象来解决这个问题,但我认为Authenticator在与资源调用相同的休眠会话中工作。我做错了吗?有没有办法避免重新加载用户?

以下是我的代码提示:

PasswordAuthenticator

public class PasswordAuthenticator  implements Authenticator<BasicCredentials, User> {

  private UserDAO userDAO;

  public PasswordAuthenticator(UserDAO userDAO) {
    this.userDAO = userDAO;
  }

  @Override
  public Optional<User> authenticate(BasicCredentials credentials) throws AuthenticationException {
    String username = credentials.getUsername();
    User user = userDAO.getUserByUsername(username);
    // check password stuff
    return Optional.of(user);
  }
}

TicketResource

@Path("/tickets/")
@Produces(MediaType.APPLICATION_JSON)
public class TicketResource {

  @GET
  @UnitOfWork
  public List<Ticket> getTickets(@Auth User caller) {
    for(Ticket t : caller.getTickets()) {  // Exception thrown here
      // processing each ticket stuff
    }
    return listOfTickets;
  }

0 个答案:

没有答案