我有一个JEE6应用程序,驻留在Glassfish 3.1.1上,它通过一些REST资源向远程客户端提供服务。一些资源需要认证,其他资源则不需要。JEE6:自定义领域vs ResourceFilter - 哪一个更适合REST资源验证?
目前我使用HTTP基本认证来保护安全资源,实现为自定义领域/ LoginModule。如果身份验证失败,则登录模块会抛出一个LoginException
Glassfish映射到HTTP 401.如果身份验证成功,则资源可以访问securityContext
中的userPrincipal
。
虽然它的工作,它确实让我烦恼,我不能拦截LoginException
。我的客户期望xml或json;在HTTP 401正文中,Glassfish为它们提供了text/html。所有其他应用程序异常我都可以用ExceptionMapper
进行截取,而不是LoginException。
目前我正在考虑用ResourceFilter
替换自定义领域,我将手动进行HTTP基本身份验证。我希望如果我在这里抛出一个异常,它会被截取并正确映射/编组。
我的问题是:
- 它是用于身份验证的
ResourceFilter
一个好主意?性能如何? - 我该如何让REST资源知道谁刚获得身份验证(谁是userPrinicipal)?
顺便说一句,我已经实现了它作为一个ResourceFilter和一个Injectable UserProvider。如果有人有兴趣,我很高兴发布代码。不回答我的问题,如果它是一个好主意,但:) – Hank