最近参与开发一个防火墙项目,主要负责Web Services,因为实际情况选用了JDK1.6自带的Jax-Ws,它比当前比较主流的CXF(已经替代了以前的XFIRE)轻量,不依赖任何容器,一个简单的Java Application就可以发布Web Services,这是一件多么令人兴奋的事,但是权限检查却非常费力,查看了很多解决方案,他们大多数是针对容器上部署的Web Services的权限检查......最后终于在官网文档(https://xwss.dev.java.net/Securing_JAVASE6_WebServices.html)上找到了解决思路,通过不断尝试得到一个比较完整的Jax-Ws权限检查方案.
要使用Jax-Ws,首先得引入相关Jar包(webservices-api.jar、webservices-rt.jar、webservices-tools.jar),下面是一个简单定义Web Services接口的实现类:
然后是发布Web Services的main方法:
其中192.168.1.109为本机的IP,8888为发布Web Services的端口号,一般运行这个main方法(加上下文的权限检查文件后),你的Web Services就算发布成功了(通过浏览器访问http://192.168.1.109:8888/fimas?wsdl即可看到wsdl文件,说明发布成功),但是如果你的接口类Processor里使用了自定义的异常类,则还得操作如下生成异常Bean(运行main才不会出错):首先在你的java项目根目录下新建一个文件夹(名字为wsdl,它和src同级)存放wsdl文件,然后通过cmd----》cd XXXXXXXXXX进入你的java项目根路径,然后执行命令:
,这样通过JDK自带的wsgen工具就会自动在项目中生成异常Bean类和wsdl文件,这样Web Services就会成功发布了.
下面才是重点关于权限检查: