2017-01-02 1 views
2

Это возможно с 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> 

ответ

1

Похоже синтаксической ошибки. Там нет закрытия цитаты для вашего имени роль в вашем sec:authorize="hasAnyRole('ROLE_ADMIN)" ...

+0

Действительно. Я проверил позже этим вечером и дам вам знать. Благодаря! – yglodt

+0

Btw демо-приложение, показывающее проблему, находится здесь: https://github.com/yglodt/spring-boot-thymeleaf – yglodt

+0

В демонстрационном приложении ссылка «page3» нуждается в аутентификации. – yglodt

1

я прошел такой же проблемой и мне просто нужно обновить thymeleaf и thymeleaf-дополнительного ПО springsecurity4, что помочь.

<properties> 
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> 
    <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding> 
    <java.version>1.8</java.version> 
    <thymeleaf.version>3.0.3.RELEASE</thymeleaf.version> 
    <thymeleaf-layout-dialect.version>2.1.1</thymeleaf-layout-dialect.version> 
</properties> 

Вот a link