我希望从登录用户中获取单例中的调用方主体。用户使用用户名/密码对rest服务进行身份验证。
在战争中,安全域位于jboss-web.xml中。
<security-domain>application-security</security-domain>战争的终点是:
@Path("/message/{message}")
public class MyRessource
{
@EJB
MySingleton singletonBean;
@GET
public Response resource(@PathParam("message") String message)
{
singletonBean.printText(message);
System.out.println("called from: " + ctx.getUserPrincipal().getName());
}单例在自己的项目中,在战争中作为依赖关系提供。
@Stateless
public class MySingletonBean implements MySingleton
{
@Resource
EJBContext context;
@Resource
SessionContext ctx;
public void printText(String text) {
System.out.println(text + ":: EJBContext: " + context.getCallerPrincipal().getName() + " SessionContext: " + ctx.getCallerPrincipal().getName());
}
}我的web.xml:
<web-app>
<security-role>
<role-name>Admin</role-name>
</security-role>
<security-constraint>
<web-resource-collection>
<url-pattern>/*</url-pattern>
<http-method-omission>OPTIONS</http-method-omission>
</web-resource-collection>
<auth-constraint>
<role-name>Admin</role-name>
</auth-constraint>
</security-constraint>
<login-config>
<auth-method>BASIC</auth-method>
</login-config>
</web-app>standalone-full-ha.xml
<subsystem xmlns="urn:wildfly:elytron:5.0" ...>
[...]
<security-domain name="application-security" default-realm="application-properties" permission-mapper="default-permission-mapper">
<realm name="application-properties"/>
</security-domain>
[...]
</subsystem>
[...]
<http-authentication-factory name="application-security-http" security-domain="application-security" http-server-mechanism-factory="global">
<mechanism-configuration>
<mechanism mechanism-name="BASIC"/>
</mechanism-configuration>
</http-authentication-factory>
[...]
<security-domains>
<security-domain name="application-security" default-realm="application-properties" permission-mapper="default-permission-mapper">
<realm name="application-properties"/>
</security-domain>
[...]
</security-domains>
[...]
<subsystem xmlns="urn:jboss:domain:security:2.0">
<security-domains>
<security-domain name="application-security">
<authentication>
<login-module code="UsersRoles" flag="required">
<module-option name="usersProperties" value="file://${jboss.server.config.dir}/context-users.properties"/>
<module-option name="rolesProperties" value="file://${jboss.server.config.dir}/context-roles.properties"/>
</login-module>
</authentication>
</security-domain>
[...]
</subsystem>
[...]
<subsystem xmlns="urn:boss:domain:undertow"...>
<application-security-domains>
<application-security-domain name="application-security" http-authentication-factory="application-security-http"/>
</application-security-domains>
[...]
</subsystem>但作为校长我总是匿名的。
我做错什么了?
发布于 2019-01-20 06:42:43
你在这里至少有三个问题:
<subsystem xmlns="urn:jboss:domain:security:2.0">是一个遗留的配置元素,它不与elytron连接;@RolesAllowed(...)保护。我有一个类似的例子:
login-config元素中的领域名称,jboss-web.xml文件中的security-domain。示例源在GitHub at 雅克斯-奥斯中。
https://stackoverflow.com/questions/54219391
复制相似问题