Проблема с авторизацией Payara/Glassfish 5
У меня есть устаревшее приложение Java EE, развернутое в GlassFish 5.0.1. Он использует специальную область для аутентификации пользователей. При входе в систему и попытке доступа к защищенному ресурсу всегда выдает ошибку 403.
Приложение раньше работало на Java EE 7 и Glassfish 4 и пыталось запустить его на Java EE 8 и Glassfish/Payara 5.
В новой среде я могу без проблем войти в приложение. Проблема возникает при попытке доступа к защищенному URL-адресу.
Default Principal To Role Mapping
опция не отмечена в Glassfish.
Я попробовал очиститьgenerated
каталог, а также повторное развертывание.
Пробовал также развертывание в Payara 5. Имею ту же проблему.
Причина, кажется, в томrequest.isUserInRole
в пользовательском диспетчере безопасности всегда возвращаетсяfalse
.
public boolean isUserInRole(List<String> roles, HttpServletRequest request, HttpServletResponse response)
{
if (roles == null || roles.size() < 1)
return false;
if (request.getUserPrincipal()==null)
{
return false;
}
for (String role : roles)
{
if (request.isUserInRole(role.trim()))
{
return true;
}
}
return false;
}
glassfish-web.xml
файл как показано ниже
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE glassfish-web-app PUBLIC "-//GlassFish.org//DTD GlassFish Application Server 3.1 Servlet 3.0//EN" "http://glassfish.org/dtds/glassfish-web-app_3_0-1.dtd">
<glassfish-web-app error-url="">
<context-root>/abc</context-root>
<security-role-mapping>
<role-name>ABC_MAS</role-name>
<group-name>ABC_MAS</group-name>
</security-role-mapping>
<class-loader delegate="false"/>
<jsp-config>
<property name="keepgenerated" value="true">
<description>Keep a copy of the generated servlet class' java code.</description>
</property>
</jsp-config>
<property name="securePagesWithPragma" value="false" />
</glassfish-web-app>
web.xml
содержит следующее
<web-app>
...
<security-constraint>
<display-name>Test application</display-name>
<web-resource-collection>
<web-resource-name>Secure Pages</web-resource-name>
<description/>
<url-pattern>/pages/secured/*</url-pattern>
<http-method>GET</http-method>
<http-method>POST</http-method>
<http-method>HEAD</http-method>
<http-method>PUT</http-method>
<http-method>OPTIONS</http-method>
<http-method>TRACE</http-method>
<http-method>DELETE</http-method>
</web-resource-collection>
<auth-constraint>
<role-name>ABC_MAS</role-name>
</auth-constraint>
</security-constraint>
<login-config>
<auth-method>FORM</auth-method>
<realm-name>abcRealm</realm-name>
<form-login-config>
<form-login-page>/pages/login.action</form-login-page>
<form-error-page>/pages/login.action</form-error-page>
</form-login-config>
</login-config>
<security-role>
<description/>
<role-name>ABC_MAS</role-name>
</security-role>
</web-app>