我使用JBoss WildFly,Jax-Rs 2.0和EJB 3.0。
我正在尝试通过在我的服务中调用login方法来实现身份验证。
@POST
@PermitAll
public Response login(AuthLoginElement al) {
try {
httpRequest.login(al.getUsername(), al.getPassword());
return Response.status(Response.Status.OK).build();
} catch (ServletException e) {
return Response.status(Response.Status.UNAUTHORIZED)
.entity(e.getMessage())
.build();
}
}
我的EJB也适用于WildFLy文档。
@Stateless
@RolesAllowed({ "guest", "admin" })
@SecurityDomain("test-policy")
public class SecuredEJB {
public String getSecurityInfo() {
// Session context injected using the resource annotation
Principal principal = ctx.getCallerPrincipal();
return principal.getName();
}
在我的standalone.xml
我定义了安全域:
<security-domain name="test-policy" cache-type="default">
<authentication>
<login-module code="Database" flag="required">
<module-option name="dsJndiName" value="java:jboss/datasources/SecurityDS"/>
<module-option name="principalsQuery" value="select password from PRINCIPLES where principal_id=?"/>
<module-option name="rolesQuery" value="select user_role, 'Roles' from ROLES where principal_id=?"/>
<module-option name="unauthenticatedIdentity" value="guest"/>
</login-module>
</authentication>
</security-domain>
然而,在调用httpRequest.login()
之后,返回200,但没有任何反应,安全日志被清除,用户未经过身份验证。你能帮助我或建议另一种认证方式吗?