2012-08-22 43 views
9

Tôi đang sử dụng lò xo có dấu freemarker làm công cụ tạo mẫu. Freemarker cho phép sử dụng JSP taglib, để bảo mật ví dụ, bằng cách thêmThêm thư viện mùa xuân để sử dụng Thẻ SIM JSP để bảo mật trong Freemarker

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

đến mẫu, những gì cho phép tôi sử dụng ví dụ

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

Nhưng, Spring/Freemarker không thể tìm thấy taglibs, trừ khi chúng được thêm vào đường dẫn lớp, vì vậy tôi đã thêm

<dependency> 
     <groupId>org.springframework.security</groupId> 
     <artifactId>spring-security-taglibs</artifactId> 
     <version>${spring.version}</version> 
    </dependency> 

vào tệp pom.xml trong dự án của tôi.

Nhưng dù sao, các thẻ không thể được tìm thấy! Tôi đã phải thêm spring-security-taglibs.jar vào thư mục WEB-INF/lib cho các thẻ được tìm thấy.

Có ai biết tại sao bình phải được thêm một cách rõ ràng vào thư mục lib không ?? Tại sao chúng không được tìm thấy bởi tomcat, trong trường hợp của tôi?

EDIT @ddekany

Cảm ơn bạn. Stacktrace là những điều sau đây, nếu vào mùa xuân-an ninh-taglibs.jar không được sao chép vào thư mục 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

Tôi nghĩ bạn nên bao gồm thông báo lỗi chính xác trong câu hỏi của mình. Ngoài ra, tôi không nghĩ rằng các đặc tả JSP sates rằng nó sẽ cho * taglibs * ('tld'-s) bằng cách sử dụng hiện tại (?) class-loader hoặc như vậy, nhưng tôi có thể sai trong đó. – ddekany

Trả lời

0

Bạn đã bao gồm các JspSupportServlet như đã nêu herehere

[EDIT] Sau khi đọc bài đăng của bạn cẩn thận hơn một chút, tôi khuyên bạn nên đọc phần "JSP.7.3.2" (và trở đi) từ JSP specification.

+0

Có, tôi đã thêm 'JspSupportServlet' như bạn đã đề xuất, nhưng lỗi vẫn như cũ. Nhìn vào Phần "JSP.7.3.2" trong [đặc tả JSP] (http://jsp.java.net/spec/jsp-2_1-fr-spec.pdf) phần quan trọng tôi đoán là: "Tài nguyên TLD đường dẫn được diễn giải tương đối so với gốc của ứng dụng web và phải giải quyết trực tiếp vào một TLD, hoặc tới một JAR có địa chỉ TLD tại vị trí META-INF/taglib.tld ". Đây có phải là câu trả lời tại sao tomcat không thể tìm thấy tập tin tld META-INF/*. Bởi vì nó bao gồm nó thông qua một phụ thuộc maven? – matthaeus

+0

Các tệp tin tld META-INF/*. Được tải từ jar. Các tệp jar cần phải nằm trong classpath là WEB-INF/lib. Nếu không tìm thấy, không có thùng chứa J2EE nào sẽ tải tld. – tom

+0

Ok, tôi hiểu điều đó, nhưng tại sao không đủ để thêm phụ thuộc maven vào thư viện taglib mùa xuân? Giống như có thể được nhìn thấy trong [this] (http://doanduyhai.wordpress.com/2012/02/26/spring-security-part-v-security-tags/) và [this] (http: //static.springsource .org/spring-security/site/petclinic-tutorial.html) ví dụ? – matthaeus

7

Trong trường hợp bất cứ ai khác chạy vào này ...

Bạn cần phải thêm các tập tin hỗ trợ mùa xuân, như được nêu ở đây (chỉ một số cắt & dán) http://static.springsource.org/spring-webflow/docs/2.2.x/reference/html/ch13s09.html.

Và sau đó thêm một số phụ thuộc:

<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> 

Giả sử bạn có mọi thứ khác làm việc, bây giờ bạn sẽ có thể để thêm taglib để trang của bạn. Ví dụ:

xmlns: giây = "http://www.springframework.org/security/tags"

< giây: ủy quyền cho ifAllGranted = "USER_ROLE">
Xin chào người dùng
</sec: ủy quyền >

* đã có thêm một không gian b/f 's' để đăng nó

+0

Phiên bản cuối cùng của Spring có 'spring-faces' là 2.4.1. – Raedwald

2

Sử dụng này phụ thuộc Maven:

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

org.springframeworkorg.springframework.security là các khung công tác khác nhau với các số phiên bản khác nhau.

Các vấn đề liên quan