pee*_*z80 6 java rest jboss ejb resteasy
我正在启动一个使用REST api的应用程序,该API在JBoss Wildfly(RestEasy)上调用EJB层.
REST服务在战争中,然后调用ejb层.我知道如何在REST上实现BASIC或任何自定义形式的验证,使用RestEasy Interceptor检查Headers等.基本上如下所述:http://howtodoinjava.com/2013/06/26/jax-rs-resteasy-basic- 认证和授权教程/
现在的问题是 - 这只是对REST外观的检查.在EJB层内部,我不知道针对REST服务进行身份验证的用户.
要清除这一点 - 当使用带有身份验证的RMI和远程EJB调用时,用户名将存储在会话上下文中:
@Stateless
public class LoginService {
@Resource
private SessionContext sessionContext;
public String getCurrentUser() {
Principal principal = sessionContext.getCallerPrincipal();
return principal.getName(); //I need this to be the username from REST auth
//Currently it's anonymous
}
}
Run Code Online (Sandbox Code Playgroud)
有没有办法以某种标准方式传播用户名?例如,将自定义主体放入SessionContext?
您可以使用主题的doAs方法。
请参阅此处的 JavaDocs。
当从 war 向 EJB 发出调用时,使用经过身份验证的主题的 doAs 方法进行调用。这样,主题就被传播到 ejb 的上下文中。(例如,@RolesAllowed 可以正常工作)如果需要,您可以照常在 web.xml 中配置身份验证。
为了获得战争中的主题,试试这个Subject userSubject=(Subject)PolicyContext.getContext("javax.security.auth.Subject.container");
| 归档时间: |
|
| 查看次数: |
1397 次 |
| 最近记录: |