Я пытался это проработать несколько дней. Я пытаюсь создать аутентификацию на основе формы для моего приложения 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\"}";
}
Может кто-нибудь дать решение или поработать, я был бы благодарен...
Вы должны сообщить 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-запрос, в то время как при аутентификации формы, настроенной в web.xml, сервер приложений автоматически перенаправляется на страницу входа и обратно на защищенный URL-адрес после успешной аутентификации.