Cxf Web服务设计问题

时间:2013-01-20 08:57:55

标签: java spring spring-security cxf

我遇到了设计问题:

我将使用一个例子来描述这个问题:

@WebService
public interface GlossaryWebService {
   @Secured("READ")
   public void foo();

   @Secured("READ")
   public void goo(); 
}

实现:

@WebService
public class GlossaryWebServiceImpl implements GlossaryWebService{


   private GlossaryService glossaryService;

   @Override
   public void foo() {
      glossaryService.foo();
   }

   @Override
   public void goo() {
      glossaryService.goo();
   } 
}

接口:

public interface GlossaryService {  
   public void foo();
   public void goo(); 
}

实现:

public Class GlossaryServiceImpl extends GlossaryService{

   @Override
   public void foo() {
       // impl
   }

   @Override
   public void goo() {
       // impl
   }
}

正如您所看到的,我们已经实现了GlossaryWebServiceImpl实现GlossaryWebService 和GlossaryServiceImpl实现GlossaryService!

问题是GlossaryWebServiceImpl充当外观(对于GlossaryService),以及这个 导致代码重复。 GlossaryService中的方法也需要在GlossaryWebService中 GlossaryServiceImpl中的方法也需要在GlossaryWebServiceImpl中!

我可以通过使GlossaryServiceImpl实现GlossaryWebService来保存GlossaryWebServiceImpl的创建 并且我们将只有2个表面和一个实现!

但这也会产生问题,因为我想要@Secured注释(在GlossaryWebService上) 仅在通过Web服务时执行,而不是在调用GlossaryServiceImpl上的方法时执行!

如果有人有任何想法建议,那将非常有帮助! 提前谢谢。

1 个答案:

答案 0 :(得分:0)

由于GlossaryWebServiceImpl是您访问服务表单Web Service时的入口点,因此我会将所有与Web Service相关的设置(角色,注释)放入其中,并将所有业务逻辑放在GlossaryServiceImpl中:

@WebService
public class GlossaryWebService{


   private GlossaryService glossaryService;

   @Secured("READ")
   public void foo() {
      glossaryService.foo();
   }

   @Secured("READ")
   public void goo() {
      glossaryService.goo();
   } 
}