问题:
我想实现一组Web服务,以保护SAML.我需要对用户进行身份验证,还需要根据用户角色进行授权.我发现了一些与此类似的问题,但没有一个问题得到满意答案.
场景:
我需要的主要功能:
问题:
我研究了一些SAML(SSO)解决方案(例如Shibboleth,opemAM,JOSSO ......);
谢谢!
以下是我发现的一些结果,和/或答案中的一些提示:
Shibboleth的:
http://shibboleth.1660669.n2.nabble.com/Web-Service-End-to-End-Security-td5526934.html
Shiboleth并不是点到点,只是点到点.
http://www.predic8.com/shibboleth-web-services-sso-en.htm
在SP之前需要代理模块进行身份验证.
OpenAM:
WSO2:
还在搜索,请贡献!!
我有一个基于json的REST Web服务实现使用:Jetty,Jersey,Jersey-JSON使用Jackson.
我的一个方法接收一个Person实例,它有一个List <String>类型的字段.即:
Public class Person {
List<String> names;
}
Run Code Online (Sandbox Code Playgroud)
如果我用一系列名字来称呼它,一切正常!例如:
{ "names" : [ "Jhon", "Doe" ] }
Run Code Online (Sandbox Code Playgroud)
但是如果这个人只有一个名字,我的客户就会创建一个单独的值元素,例如:
{ "names" : "Jhon" }
Run Code Online (Sandbox Code Playgroud)
当我尝试使用单个值调用服务时,我得到一个例外:
Can not deserialize instance of java.util.ArrayList out of VALUE_STRING token
Run Code Online (Sandbox Code Playgroud)
题:
我应该如何创建/配置我的Web服务,以便能够在将数组字段作为单个元素发送给我时反序列化数组字段.
-
我已经读过:
和
这是指最后一个答案:
Jersey客户端无法反序列化json服务 - 异常(无法反序列化实例)
但这些都没有解决问题.
先感谢您!
在Web服务中进行身份验证和授权的最佳方法是什么?
我正在开发一组Web服务,需要基于角色的访问控制.使用metro - SOAP,简单的java而不使用EJB.
至今:
我想我可以使用SOAP处理程序拦截所有消息,并使用消息附带的一些会话标识符令牌在hander中执行授权控制,该令牌可以与保存在数据库中的标识符匹配,登录Web方法.
编辑:
我还有一些问题:
编辑2
因为@ ag112答案:
我正在使用Glassfish.
我使用WS-Policy和WS-Security来加密和签名消息.使用相互证书身份验证.我想在应用程序之间补充此消息级别的安全性,同时在消息级别对用户进行身份验证和授权.
我只是开发服务,我几乎不知道客户,只是他们可以用不同的语言创建.
在这一点上,我认为最重要的是做我需要做的事情来验证和验证用户,我是客户端应用程序最简单的实现方式.
我提出了一个关于JAX-WS,身份验证和授权的问题 - 如何?; 讨论了安全级别以及存储用户凭据的位置.
现在得出一些结论后,我想尝试其中一种方案:
如何获取凭据并进行授权? 我有两个想法:
你能帮我决定最好的方法,以及如何实现它?
请记住,我需要共同证书,以及用户令牌.
我正在考虑代码结构,并思考setter.这些曾经是void方法,那么为什么不使用一些可能的返回值,来启用一些新的代码结构呢?
我的想法是将所有属性setter从void更改为实例引用,因此我们可以按顺序执行setter或其他操作.这是一个例子:
public class MyClass {
private int foo;
private String bar;
public MyClass setFoo(int foo) {
this.foo = foo;
return this;
}
public MyClass setBar(String bar) {
this.bar = bar;
return this;
}
}
Run Code Online (Sandbox Code Playgroud)
然后在我们可以做的代码中的其他地方:
...
MyClass myInstance = new MyClass();
myInstance.setFoo(auxFoo).setBar(auxBar);
...
Run Code Online (Sandbox Code Playgroud)
这允许在一行中设置所有类属性,这在转换方法中很有用.
甚至:
...
return myInstance.setFoo(auxFoo);
Run Code Online (Sandbox Code Playgroud)
这个是我的目标,例如在返回时可以设置错误属性.例如,这可以简化捕获块.
编辑: 经过一些答案我需要补充:
return例如示例.我希望看到一些讨论.
我有一个用Java(1.6)创建的Web服务,使用maven的metro(2.0),在Tomcat 6下.在所有Web方法中,返回类型是泛型类:
public class WsResult<T> {
protected T result; // the actual result
protected Code requestState; // 0K, or some error code if needed
protected String message; // if error, instead of result, insert a message
}
Run Code Online (Sandbox Code Playgroud)
例如:
public WsResult<OtherClass> someMethod(...);
public WsResult<Foo> someMethod_2(...);
Run Code Online (Sandbox Code Playgroud)
在客户端:
MyServiceService service = new MyServiceService();
MyService port = service.getMyServicePort();
WsResult result = port.someMethod(...);
OtherClass oc = (OtherClass) result.getResult();
WsResult res = port.someMethod_2(...);
Foo o = (Foo) res.getResult();
Run Code Online (Sandbox Code Playgroud)
在一些网络方法中,它正在运作.但是当结果是具有List<? class>属性的类时,它无法解组.
该项目是最大项目的一部分.因此,出于测试目的,我创建了一个新的,更简单的,只是项目,使用相同的数据模型,并复制其中一个Web方法,在这种情况下它工作,并且在unmarshal之后,我有一个结果,我可以投射到预期的类型.
可能会发生什么?
编辑:
答案是肯定的解决方案,但会为添加到字段声明中的每种类型生成一个getter.有没有更好的办法?
任何人都能指出Netbeans插件有助于做更好的代码吗?我希望找到一些做Java代码审查和搜索的插件:
谢谢!
我有一个超级动物,由猫,狗和狮子扩展.这三个都有一个String sound表示声音的字段.方法playSound(int i,String s)播放声音s,i次数.是否可以在Animal超类中使用一个通用方法来接受调用它的子类的字段?或者我是否必须在每个使用自己的"声音"变量调用super的类中创建一个单独的重写方法?
java ×9
jax-ws ×4
web-services ×3
coding-style ×1
inheritance ×1
jackson ×1
jax-rs ×1
jaxb ×1
jersey ×1
netbeans ×1
plugins ×1
rest ×1
saml ×1
search ×1
soap ×1
ws-security ×1