aho*_*oge 22 java jax-ws basic-authentication tomcat6
我是JAX-WS的新手,有一件事我不明白.
有很多关于如何设置JAX-WS安全性的教程,但几乎所有情况下BindingProvider.USERNAME_PROPERTY和BindingProvider.PASSWORD_PROPERTY都存储在一些.xml文件中(取决于我认为的容器) - 它们是"硬编码的"那是.这就是我没有得到的.如何通过将BindingProvider.USERNAME_PROPERTY和BindingProvider.PASSWORD_PROPERTY与数据库中的用户名和密码进行比较来验证Web服务客户端?我尝试在客户端设置BindingProvider.USERNAME_PROPERTY和BindingProvider.PASSWORD_PROPERTY,如下所示:
ShopingCartService scs = new ShopingCartService(wsdlURL, name);
ShopingCart sc = scs.getShopingCartPort();
Map<String, Object> requestContext = ((BindingProvider)sc).getRequestContext();
requestContext.put(BindingProvider.USERNAME_PROPERTY, userName);
requestContext.put(BindingProvider.PASSWORD_PROPERTY, password);
sc.someFunctionCall();
Run Code Online (Sandbox Code Playgroud)
然后,在服务器端检索如下:
@Resource
WebServiceContext wsContext;
@WebMethod
public void someFunctionCall() {
MessageContext mc = wsContext.getMessageContext();
mc.get(BindingProvider.USERNAME_PROPERTY);
mc.get(BindingProvider.PASSWORD_PROPERTY);
}
Run Code Online (Sandbox Code Playgroud)
但我总是得到null,我没有在xml中设置任何东西,web服务工作得很好,除了我不能得到那些变量:(
我在java 1.6,tomcat 6和JAX-WS上运行.
任何有关使用数据库中的密码验证用户的帮助都非常感谢,谢谢.
mky*_*ong 20
我认为您正在寻找应用程序级别的JAX-WS身份验证,而不是服务器级别的HTTP基础知识.请参阅以下完整示例:
在Web服务客户端站点上,只需将"用户名"和"密码"放入请求标头中.
Map<String, Object> req_ctx = ((BindingProvider)port).getRequestContext();
req_ctx.put(BindingProvider.ENDPOINT_ADDRESS_PROPERTY, WS_URL);
Map<String, List<String>> headers = new HashMap<String, List<String>>();
headers.put("Username", Collections.singletonList("someUser"));
headers.put("Password", Collections.singletonList("somePass"));
req_ctx.put(MessageContext.HTTP_REQUEST_HEADERS, headers);
Run Code Online (Sandbox Code Playgroud)
在Web服务服务器站点上,通过WebServiceContext获取请求标头参数.
@Resource
WebServiceContext wsctx;
@WebMethod
public String method() {
MessageContext mctx = wsctx.getMessageContext();
Map http_headers = (Map) mctx.get(MessageContext.HTTP_REQUEST_HEADERS);
List userList = (List) http_headers.get("Username");
List passList = (List) http_headers.get("Password");
//...
Run Code Online (Sandbox Code Playgroud)
sno*_*ake 11
BindingProvider.USERNAME_PROPERTY和BindingProvider.PASSWORD_PROPERTY匹配HTTP基本身份验证机制,该机制在HTTP级别而不是在应用程序或servlet级别启用身份验证过程.
基本上,只有HTTP服务器才能知道用户名和密码(最终根据HTTP /应用服务器规范知道应用程序,例如Apache/PHP).使用Tomcat/Java,在web.xml中添加登录配置BASIC和相应的安全约束/安全角色(稍后将与真实用户的用户/组关联的角色).
<login-config>
<auth-method>BASIC</auth-method>
<realm-name>YourRealm</realm-name>
</login-config>
Run Code Online (Sandbox Code Playgroud)
然后,将HTTP服务器(或应用程序服务器)级别的领域与相应的用户存储库相连接.对于tomcat,您可以查看可能符合您需求的JAASRealm,JDBCRealm或DataSourceRealm.
http://tomcat.apache.org/tomcat-6.0-doc/realm-howto.html
小智 6
我有同样的问题,在这里找到了解决方案:
http://www.mastertheboss.com/web-interfaces/336-jax-ws-basic-authentication.html?start=1
祝好运
| 归档时间: |
|
| 查看次数: |
96312 次 |
| 最近记录: |