小编lpi*_*.eu的帖子

使用SAML(SSO)的Web服务安全性 - 如何?

问题:

我想实现一组Web服务,以保护SAML.我需要对用户进行身份验证,还需要根据用户角色进行授权.我发现了一些与此类似的问题,但没有一个问题得到满意答案.

场景:

  • 仅使用Webservices访问Java Webapp;
  • SOAP - 地铁;
  • 客户端使用他们将开发的一些桌面应用程序.

我需要的主要功能:

  • 免费软件;
  • SAML 2.0;
  • 用于管理用户信息的LDAP(或类似解决方案);
  • 消息级安全性(SOAP).

问题:

我研究了一些SAML(SSO)解决方案(例如Shibboleth,opemAM,JOSSO ......);

  • 我可以使用其中任何一个,而不会牺牲任何关键功能吗?
  • 或者我是否需要实现自己的方式来处理SAML令牌?
  • 怎么做?

谢谢!



以下是我发现的一些结果,和/或答案中的一些提示:

还在搜索,请贡献!!

java web-services jax-ws saml single-sign-on

22
推荐指数
2
解决办法
9046
查看次数

Jersey:无法从String中反序列化ArrayList的实例

我有一个基于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服务,以便能够在将数组字段作为单个元素发送给我时反序列化数组字段.

-

我已经读过:

杰克逊反序列化 - 包含ArrayList <T>

如何自定义JAXB对象列表到JSON的序列化?

这是指最后一个答案:

Jersey客户端无法反序列化json服务 - 异常(无法反序列化实例)

Jaxb json缺少一个元素数组的括号

但这些都没有解决问题.

先感谢您!

java rest jax-rs jersey jackson

13
推荐指数
2
解决办法
3万
查看次数

JAX-WS,身份验证和授权 - 如何?

在Web服务中进行身份验证和授权的最佳方法是什么?

我正在开发一组Web服务,需要基于角色的访问控制.使用metro - SOAP,简单的java而不使用EJB.

  • 我想使用用户名和密码对用户进行一次身份验证,以便与数据库进行匹配.在随后的电话中.
  • 我想使用某种会话管理.可以是在登录时检索到客户端的某个会话ID,以便在所有呼叫中显示.

至今:

  • 使用数据库读取身份验证 - 但我想要应用程序级别验证;
  • 使用jax-ws读取应用程序身份验证 - 但我不想每次都执行身份验证机制;

  • 我想我可以使用SOAP处理程序拦截所有消息,并使用消息附带的一些会话标识符令牌在hander中执行授权控制,该令牌可以与保存在数据库中的标识符匹配,登录Web方法.

编辑:

我还有一些问题:

  • 如何知道被调用的Web方法的名称?
  • 我应该使用什么样的令牌?
  • 如何在通话之间传递此令牌?

编辑2

因为@ ag112答案:

我正在使用Glassfish.

我使用WS-Policy和WS-Security来加密和签名消息.使用相互证书身份验证.我想在应用程序之间补充此消息级别的安全性,同时在消息级别对用户进行身份验证和授权.

我只是开发服务,我几乎不知道客户,只是他们可以用不同的语言创建.

在这一点上,我认为最重要的是做我需要做的事情来验证和验证用户,我是客户端应用程序最简单的实现方式.

java authentication web-services jax-ws access-control

11
推荐指数
1
解决办法
9974
查看次数

用户在SOAP中进行身份验证 - 如何操作?

我提出了一个关于JAX-WS,身份验证和授权的问题 - 如何?; 讨论了安全级别以及存储用户凭据的位置.

现在得出一些结论后,我想尝试其中一种方案:

  • SOAP Web服务 - metro
  • 消息级安全性 - 相互证书身份验证,用于验证客户端应用程序
  • 肥皂头中的用户凭证

如何获取凭据并进行授权? 我有两个想法:

  • JAAS(我对此一无所知);
  • SOAP处理程序 - 使用WebServiceContext从消息中提取凭据并"手动"执行授权.

你能帮我决定最好的方法,以及如何实现它?

请记住,我需要共同证书,以及用户令牌.

java ws-security soap jax-ws

8
推荐指数
1
解决办法
1万
查看次数

Setters返回实例引用.图案还是反图案?

我正在考虑代码结构,并思考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)

这个是我的目标,例如在返回时可以设置错误属性.例如,这可以简化捕获块.

编辑: 经过一些答案我需要补充:

  • 问题只是关于setter(不是关于在所有方法中执行此操作),并且不限于链接,而是限于其他用法,return例如示例.
  • 从void到其他东西的变化是否会产生任何问题?例如,JavaBeans内省.
  • 你能看到这样做的优势或劣势吗?

我希望看到一些讨论.

java design-patterns coding-style

6
推荐指数
2
解决办法
3474
查看次数

用Java解析搜索查询

我一直在尝试找到一种简单的方法来解析搜索查询并将其转换为我的数据库的SQL查询.

我找到了两个解决方案:

  1. Lucene:强大的基于Java的搜索引擎,包含一个查询解析器,但它不是很容易配置,我可以找到一种方法来轻松破解/调整它来创建SQL查询.
  2. ANTLR:经验丰富的文本词法分析器.用于构建从编译器到摩天大楼的任何东西.ANTLR具有高度可配置性,但从现在开始每个人都需要学习一门新语言...

还有其他想法吗?

java search

5
推荐指数
1
解决办法
5936
查看次数

Unmarshal使用List <T>字段在泛型上生成空字段

我有一个用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.有没有更好的办法?

java web-services jax-ws jaxb

5
推荐指数
1
解决办法
539
查看次数

Netbeans插件有助于开发更好的代码? - 对于Java

任何人都能指出Netbeans插件有助于做更好的代码吗?我希望找到一些做Java代码审查和搜索的插件:

  • bug模式
  • 重复的代码
  • 和其他类型的漏洞.

谢谢!

java plugins netbeans netbeans-plugins

5
推荐指数
1
解决办法
1932
查看次数

是否可以从Java中的超类调用子类的实例变量?

我有一个超级动物,由猫,狗和狮子扩展.这三个都有一个String sound表示声音的字段.方法playSound(int i,String s)播放声音s,i次数.是否可以在Animal超类中使用一个通用方法来接受调用它的子类的字段?或者我是否必须在每个使用自己的"声音"变量调用super的类中创建一个单独的重写方法?

java inheritance

0
推荐指数
1
解决办法
69
查看次数