Wildfly表单身份验证

时间:2016-07-21 17:27:53

标签: java angularjs authentication jax-rs wildfly-8

我已经尝试了几天。我正在尝试为我的JAVA EE应用程序创建基于表单的身份验证,该应用程序在wildfly上运行。我正在使用JAX-RS和AngularJS。我已经创建了wildfly安全域,如下所示

 <security-domain name="malison">
                <authentication>
                    <login-module code="Database" flag="required">
                        <module-option name="dsJndiName" value="java:jboss/datasources/malisonDS"/>
                        <module-option name="principalsQuery" value="select password from USER where user=?"/>
                        <module-option name="rolesQuery" value="select position from USER where user=?"/>
                    </login-module>
                </authentication>
            </security-domain>

并配置了我的web.xml

 <security-constraint>
    <display-name>UnSecuredPages</display-name>

    <web-resource-collection>
        <web-resource-name>Access</web-resource-name>
        <url-pattern>/api/user/*</url-pattern>
    </web-resource-collection>        
    <web-resource-collection>
        <web-resource-name>Access</web-resource-name>
        <url-pattern>/user.jsp</url-pattern>
    </web-resource-collection>

    <web-resource-collection>
        <web-resource-name>Access</web-resource-name>
        <url-pattern>/assets/*</url-pattern>
    </web-resource-collection>
</security-constraint>

<security-role>
    <role-name>ADMIN</role-name>
</security-role>

现在我在为我的身份验证功能编写代码时遇到了问题。哪个应该向客户发送成功回复。我认为这样可行。

    @POST
@Path("/authenticate")
@Consumes(MediaType.APPLICATION_JSON)
public String authenticate(@Context HttpServletRequest request, JSONObject obj){

    String userName = String.valueOf(obj.get("username"));
    String password = String.valueOf(obj.get("password"));
    try{
        request.login(userName, password);
    }
    catch(Exception e){
        e.printStackTrace();
    }
    return "{\"success\":true, \"msg\": \"Saved successfully\"}";
}

任何人都可以提供解决方案或解决方法我会很感激......

1 个答案:

答案 0 :(得分:0)

您需要告诉Wildfly此应用程序使用哪个安全域进行身份验证。将一个jboss-web.xml添加到WEB-INF:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE jboss-web PUBLIC "-//JBoss//DTD Web Application 5.0//EN" "http://www.jboss.org/j2ee/dtd/jboss-web_5_0.dtd">
<jboss-web>
    <security-domain>java:/jaas/malison</security-domain>
</jboss-web>

此外,您可能需要向web.xml添加登录配置。这是HTML基本身份验证的一个示例:

<login-config>
    <auth-method>BASIC</auth-method>
</login-config>

此处有更多详情: https://dzone.com/articles/understanding-web-security

但请注意,您不会像web.xml定义那样进行表单身份验证。您在HTTP请求中直接调用login方法,而在web.xml中配置了表单身份验证,应用程序服务器会在身份验证成功后自动重定向到登录页面并返回到安全URL。