2012-08-22 26 views
9

Estoy usando la primavera con freemarker como motor de plantilla. Freemarker permite utilizar la JSP Taglibs, para la seguridad, por ejemplo, mediante la adición deAgregar biblioteca de primavera para el uso de JSP Taglibs para seguridad en Freemarker

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

a las plantillas, lo que me permite utilizar por ejemplo

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

Pero, Primavera/Freemarker No puedo encontrar las taglibs, a menos que se añaden a la ruta de clases, por lo que añade

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

a mi pom.xml en mi proyecto.

Pero de todos modos, ¡no se encontraron las etiquetas! Tuve que agregar spring-security-taglibs.jar en la carpeta WEB-INF/lib para encontrar las etiquetas.

¿Alguien sabe por qué el jar se tiene que agregar explícitamente en la carpeta lib? ¿Por qué no son encontrados por Tomcat, en mi caso?

EDITAR @ddekany

Gracias. El StackTrace es la siguiente, si el spring-security-taglibs.jar no se copia en el directorio 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

Creo que debería incluir el mensaje de error exacto en su pregunta. Además, no creo que la especificación JSP indique que busca * taglibs * ('tld'-s) utilizando la corriente (?) cargador de clase o tal, pero tal vez estoy equivocado en eso. – ddekany

Respuesta

0

¿Incluyó la JspSupportServlet como se indica here y here

[EDIT] Después de leer su publicación con más cuidado, le aconsejo que lea la sección "JSP.7.3.2" (y en adelante) del JSP specification.

+0

Sí, he agregado el 'JspSupportServlet' tal como lo propuso, pero el error sigue siendo el mismo. Mirando la sección "JSP.7.3.2" en [especificación JSP] (http://jsp.java.net/spec/jsp-2_1-fr-spec.pdf), la parte esencial, supongo, es esta: "El recurso TLD la ruta se interpreta en relación con la raíz de la aplicación web y debe resolverse en un archivo TLD directamente, o en un archivo JAR que tenga un archivo TLD en la ubicación META-INF/taglib.tld ". ¿Es esta la respuesta por la cual tomcat no puede encontrar el archivo META-INF/*. Tld? ¿Porque lo incluí a través de una dependencia de maven? – matthaeus

+0

Los archivos META-INF/*. Tld se cargan desde jar's. Los archivos jar deben estar en el classpath que es WEB-INF/lib. Si no se encuentra allí, ningún contenedor J2EE cargará el tld. – tom

+0

Ok, entiendo eso, pero ¿por qué no es suficiente agregar la dependencia de maven a la biblioteca de taglib de primavera? Como se puede ver en [this] (http://doanduyhai.wordpress.com/2012/02/26/spring-security-part-v-security-tags/) y [this] (http: //static.springsource .org/spring-security/site/petclinic-tutorial.html) ejemplos? – matthaeus

7

En el caso de cualquier otra persona se encuentra con esto ...

Es necesario añadir los archivos de soporte de resorte, tal como se describe aquí (sólo algunos cortar & pegar) http://static.springsource.org/spring-webflow/docs/2.2.x/reference/html/ch13s09.html.

y luego añadir algunas dependencias:

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

Asumiendo que tiene todo lo demás de trabajo, ahora debería ser capaz de añadir el taglib a sus páginas. Por ejemplo:

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

< sec: autorizar ifAllGranted = user "user_role">
Hola
</sec: autorizar >

* tuvo que añadir un espacio de b/f 's' para publicar su

+0

La última versión de Spring que tiene 'spring-faces' era 2.4.1. – Raedwald

2

uso esta dependencia Maven:

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

org.springframework y org.springframework.security son marcos diferentes con diferentes números de versión.

Cuestiones relacionadas