suppresswarnings sirven sirve que persistencia para notacion las ejemplo categorias anotaciones java annotations spring-security

java - sirven - primavera no aplica las anotaciones de seguridad del método



para que sirven las anotaciones (7)

¿Tienes la declaración?

<global-method-security secured-annotations="enabled" jsr250-annotations="enabled" />

en el mismo archivo de configuración que el que definió el bean MyServiceManager? Tuve el mismo problema hasta que activé la depuración de org.springframework y me di cuenta de que la seguridad de primavera solo se aplicaba en el mismo archivo en el que se definía global-method-security.

Soy un poco perdido en cuanto a por qué la primavera no está aplicando el @Secured ("ROLE_USER") en mi interfaz de servicio. Mis controladores se establecen usando anotaciones.

Un ejemplo de mi interfaz de servicio

public interface MyServiceManager { @Secured("ROLE_USER") public void delete(int cid); @RolesAllowed({"ROLE_USER"}) public Contact getContact(int contactId); }

mi contexto de seguridad:

<global-method-security secured-annotations="enabled" jsr250-annotations="enabled"> </global-method-security> <http auto-config="true" > <intercept-url pattern="/secure/**" access="ROLE_SUPERVISOR" /> <intercept-url pattern="/addcontact**" access="IS_AUTHENTICATED_REMEMBERED" /> <intercept-url pattern="/**" access="IS_AUTHENTICATED_ANONYMOUSLY" /> <concurrent-session-control max-sessions="1" exception-if-maximum-exceeded="true"/> <form-login login-page="/login.jsp" authentication-failure-url="/login.jsp?login_error=1"/> <logout logout-success-url="/welcome.do" logout-url="/logout"/> </http> <authentication-provider> <password-encoder hash="md5"/> <user-service> <user name="rod" password="a564de63c2d0da68cf47586ee05984d7" authorities="ROLE_SUPERVISOR, ROLE_USER, ROLE_TELLER" /> </user-service> </authentication-provider>


Intenta poner las anotaciones en la clase de implementación en lugar de la interfaz y ve si eso funciona. Terminé haciéndolo en un proyecto reciente porque también estaba usando el atributo @Transactional en mi capa de servicio, y los documentos de Spring recomiendan ponerlos en la clase y no en la interfaz. No sé si el mismo problema podría aplicarse a @Secured, pero quería mantener las anotaciones en el mismo lugar. Ver los documentos de Spring

En cuanto a la respuesta de Kent Lai ... esa es una buena idea ... asegúrese de que su archivo de configuración de seguridad esté siendo incluido por Spring.


Después de investigar más sobre este problema, llegué a la siguiente conclusión / solución. No estoy seguro de si es 100% correcto ... pero funciona.

Puse toda mi configuración en el archivo dispatcher-servlet.xml. Entonces, en lugar de tener un disptacher-servlet.xml y application-context.xml. Dispatcher-servlet.xml es cargado por la aplicación (contextConfigLocation). Dentro del dispatcher-servlet.xml importo mi security-context.xml y datasource-context.xml. Después de eso, todo funciona.


Yo tuve el mísmo problema. Usando la información de la respuesta de Kent Lai aquí, pude solucionarlo.

Puse el elemento <global-method-security> en mi app-servlet.xml pero mantuve las definiciones de seguridad separadas en security.xml , donde web.xml tiene contextConfigLocation para app-servlet.xml y security.xml .

¡Funciona como un encanto ahora!


¿Usaste algo así en tu web.xml?

<servlet> <servlet-name>name</servlet-name> <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> <init-param> <param-name>contextConfigLocation</param-name> <param-value>/WEB-INF/spring/webmvc-config.xml</param-value> </init-param> <load-on-startup>1</load-on-startup> </servlet>

No estoy seguro de por qué, pero si uso el DispatcherServlet no pude aplicar las anotaciones de seguridad


En mi caso, la ubicación exacta de esta declaración:

<global-method-security secured-annotations="enabled" >

demostrado ser muy importante Asegúrese de ponerlo después de declarar qué clases deben escanearse y utilizarse como controladores.

<context:component-scan base-package="com.test.controller" />

Esta es la manera de asegurarse de que las anotaciones @Secured también entren en el juego


Yo tuve el mísmo problema. Después de que agregué:

<context:annotation-config />

en mi archivo spring-security.xml desapareció.

Espero que esto ayude a alguien :)