繁体   English   中英

Cxf Web服务设计问题

[英]Cxf Web service design qestion

我有一个设计问题:

我将使用一个示例来描述该问题:

@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
   }
}

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

问题是GlossaryWebServiceImpl充当Facade(对于GlossaryService),这会导致代码重复。 GlossaryService中的方法也必须在GlossaryWebService中,并且GlossaryServiceImpl中的方法也必须在GlossaryWebServiceImpl中!

通过使GlossaryServiceImpl实现GlossaryWebService,可以节省GlossaryWebServiceImpl的创建,这样,我们只有2个Iterfaces和1个实现!

但这也造成了问题,因为我希望仅在通过Web服务而不是在调用GlossaryServiceImpl的方法时才执行@Secured注释(在GlossaryWebService上)!

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

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

@WebService
public class GlossaryWebService{


   private GlossaryService glossaryService;

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM