Это возможно с Thymeleaf
3.0:Использование Spring Security в Thymeleaf спасся выражения в JavaScript
/*[# th:if="${user.admin}"]*/
alert('Welcome admin');
/*[/]*/
Однако это не работает:
/*[# sec:authorize="hasAnyRole('ROLE_ADMIN)"]*/
alert('Welcome admin');
/*[/]*/
Это действительно не возможно, или я делаю что-то неправильно ?
Я использую Spring Security 4.1.
Некоторые справочная информация о сбежавшего экспрессии разборе: https://github.com/thymeleaf/thymeleaf/issues/395
Edit 1
Даниэль Фернандес нашел недостающую одинарную кавычку в мой первоначальный вопрос.
К сожалению, после его добавления он по-прежнему не работает.
Выражение анализируется, поскольку оно исчезает из полученного html/javascript.
Но document.writeln() выполняется даже я не вошел в систему, или даже когда я вошел в систему и изменить чек sec:authorize="hasRole('ROLE_ADMIN123')
<script type="text/javascript" th:inline="javascript">
/*[# sec:authorize="hasRole('ROLE_ADMIN')"]*/
document.writeln("ADMIN !!!");
/*[/]*/
</script>
Edit 2
Это мой обходной until further notice:
Создать метод в @Service
который не проверить, имеет ли пользователь необходимую роль (ы) или нет:
import javax.servlet.http.HttpServletRequest;
import org.springframework.stereotype.Service;
@Service
public class UtilService {
public boolean hasAnyRole(HttpServletRequest req, String... roles) {
for (final String role : roles) {
if (req.isUserInRole(role)) {
return true;
}
}
return false;
}
}
И использовать его, как это в JavaScript
блоке:
<script type="text/javascript" th:inline="javascript">
/*[# th:if="${@utilService.hasAnyRole(#httpServletRequest, 'ROLE_ADMIN')}"]*/
...
/*[/]*/
</script>
Действительно. Я проверил позже этим вечером и дам вам знать. Благодаря! – yglodt
Btw демо-приложение, показывающее проблему, находится здесь: https://github.com/yglodt/spring-boot-thymeleaf – yglodt
В демонстрационном приложении ссылка «page3» нуждается в аутентификации. – yglodt