2012-08-22 15 views
9

Używam sprężyny z freemarkerem jako silnika szablonów. Freemarker pozwala używać JSP Taglibs, dla bezpieczeństwa, na przykład przez dodanieDodawanie biblioteki sprężynowej do używania tagów JSP w celu zabezpieczenia w Freemarker

<#assign security=JspTaglibs["http://www.springframework.org/security/tags"] /> 

do szablonów, co pozwala mi korzystać na przykład

<@security.authorize ifNotGranted="ROLE_ADMIN"> 
     whatever 
    </@security.authorize> 

Ale wiosna/Freemarker nie może znaleźć taglibs, chyba że są one dodawane do ścieżki klasy, więc dodałem

<dependency> 
     <groupId>org.springframework.security</groupId> 
     <artifactId>spring-security-taglibs</artifactId> 
     <version>${spring.version}</version> 
    </dependency> 
do mojego pom.xml w moim projekcie.

Ale w każdym razie nie można znaleźć tagów! Musiałem dodać plik spring-security-taglibs.jar do folderu WEB-INF/lib, aby można było znaleźć znaczniki.

Czy ktoś wie, dlaczego słoik musi być jawnie dodany do folderu lib? Dlaczego nie są znalezione przez kocur, w moim przypadku?

EDYTUJ @ddekany

Dziękuję. StackTrace jest następujący, jeśli sprężyna-security-taglibs.jar nie jest kopiowany do katalogu WEB-INF/lib

No mapping defined for http://www.springframework.org/security/tags 
    The problematic instruction: ---------- ==> assignment: 
      security=JspTaglibs["http://www.springframework.org/security/tags"] 
      [on line 12, column 1 in home.ftl] in user-directive content.main 
      [on line 8, column 9 in home.ftl] in user-directive layout.global 
      [on line 2, column 1 in home.ftl] 
    ---------- Java backtrace for programmers: ----------  
    freemarker.template.TemplateModelException: 
      No mapping defined for http://www.springframework.org/security/tags at   
    freemarker.ext.jsp.TaglibFactory.get(TaglibFactory.java:180) at 
    ... 
+0

Myślę, że powinieneś podać dokładny komunikat o błędzie w swoim pytaniu. Ponadto, nie sądzę, że specyfikacja JSP stwierdza, że ​​szuka * taglibs * ('tld'-s) przy użyciu bieżącego (?) klasa-ładowacz, czy coś takiego, ale może jestem w tym zły. – ddekany

Odpowiedz

0

Czy należą JspSupportServlet jak stwierdzono here i here

[EDIT] Po przeczytaniu postu nieco ostrożniej radzę ci przeczytać sekcję "JSP.7.3.2" (i dalej) z JSP specification.

+0

Tak, dodałem 'JspSupportService \", zgodnie z propozycją, ale błąd jest nadal taki sam. Patrząc na sekcję "JSP.7.3.2" w [specyfikacji JSP] (http://jsp.java.net/spec/jsp-2_1-fr-spec.pdf) najważniejsza część jest taka: "Zasób TLD ścieżka jest interpretowana względem katalogu głównego aplikacji internetowej i powinna zostać bezpośrednio przekształcona w plik TLD lub plik JAR zawierający plik TLD o wartości w lokalizacji META-INF/taglib.tld ". Czy to jest odpowiedź, dlaczego tomcat nie może znaleźć pliku META-INF/*. Tld? Ponieważ zawarłem to poprzez zależność od mavenów? – matthaeus

+0

Pliki tld META-INF/*. Są ładowane z słoika. Pliki jar muszą znajdować się w ścieżce klas, która jest WEB-INF/lib. Jeśli nie zostanie znaleziony, żaden kontener J2EE nie załaduje tld. – tom

+0

Ok, rozumiem to, ale dlaczego nie wystarczy dodać zależności maven do biblioteki taglib wiosny? Jak widać w [this] (http://doanduyhai.wordpress.com/2012/02/26/spring-security-part-v-security-tags/) i [this] (http: //static.springsource .org/spring-security/site/petclinic-tutorial.html) przykłady? – matthaeus

7

W przypadku ktoś prowadzi do tego ...

Trzeba dodać pliki obsługi wiosnę, jak opisano tutaj (tylko niektóre cięcia & pasty) http://static.springsource.org/spring-webflow/docs/2.2.x/reference/html/ch13s09.html.

a następnie dodać kilka zależności:

<dependency> 
    <groupId>org.springframework.security</groupId> 
    <artifactId>spring-security-taglibs</artifactId> 
    <version>2.0.0</version> 
</dependency> 
<dependency> 
    <groupId>org.springframework.webflow</groupId> 
    <artifactId>spring-faces</artifactId> 
    <version>2.3.1.RELEASE</version> 
</dependency> 

Zakładając, że masz wszystko jeszcze działa, powinieneś teraz móc dodać TagLib do swoich stron. Np

xmlns: s = "http://www.springframework.org/security/tags"

< s: autoryzacji ifAllGranted = "USER_ROLE">
Cześć użytkownika
</s: autoryzacji >

* było dodać przestrzeni b/f 's', aby umieścić go

+0

Ostatnia wersja Springa, która miała "wiosenne twarze", to 2.4.1. – Raedwald

2

Zastosowanie uzależnienie Maven:

<dependency> 
    <groupId>org.springframework.security</groupId> 
    <artifactId>spring-security-taglibs</artifactId> 
    <version>3.2.5.RELEASE</version> 
</dependency> 

org.springframework i org.springframework.security to różne struktury o różnych numerach wersji.