tutorial manager example java spring spring-security

manager - java.lang.IllegalStateException: BeanFactory no está inicializado o ya está cerrado: llame a ''actualizar'' antes de acceder a beans a través de ApplicationContext



spring security rest (2)

Necesito agregar Spring Security con una página de inicio de sesión personalizada y conexión a la base de datos a mi proyecto Spring MVC. Recibo el siguiente mensaje de error, basado en las respuestas de otras preguntas. Intenté cambiar el código, por ejemplo, cambié mi versión de Spring Security Schema a 4.0, pero el código devuelve el siguiente error:

Se cambió el esquema a 4.0

http://www.springframework.org/schema/security/spring-security-4.0.xsd

Error

Cannot initialize context because there is already a root application context present - check whether you have multiple ContextLoader* definitions in your web.xml!

Mi código

mi-seguridad.xml

<?xml version="1.0" encoding="UTF-8"?> <beans:beans xmlns=''http://www.springframework.org/schema/security'' xmlns:beans=''http://www.springframework.org/schema/beans'' xmlns:xsi=''http://www.w3.org/2001/XMLSchema-instance'' xsi:schemaLocation=''http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.2.xsd http://www.springframework.org/schema/security http://www.springframework.org/schema/security/spring-security-3.2.xsd''> <beans:import resource="security-db.xml" /> <http auto-config="true" access-denied-page="/notFound.jsp" use-expressions="true"> <intercept-url pattern="/" access="permitAll" /> </http> </beans:beans>

web.xml

<?xml version="1.0" encoding="UTF-8"?> <web-app xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" version="3.0"> <listener> <listener-class>org.apache.tiles.extras.complete.CompleteAutoloadTilesListener</listener-class> </listener> <listener> <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class> </listener> <servlet> <servlet-name>my</servlet-name> <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> <load-on-startup>1</load-on-startup> </servlet> <servlet-mapping> <servlet-name>my</servlet-name> <url-pattern>/</url-pattern> </servlet-mapping> <context-param> <param-name>contextConfigLocation</param-name> <param-value>/WEB-INF/config/my-security.xml </param-value> </context-param> </web-app>

seguridad-db.xml

<beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.1.xsd"> <bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource"> <property name="driverClassName" value="com.mysql.jdbc.Driver" /> <property name="url" value="jdbc:mysql://localhost/dbproj" /> <property name="username" value="jack" /> <property name="password" value="jack" /> </bean> </beans>


Agregue DelegatingFilterProxy a su web.xml:

<?xml version="1.0" encoding="UTF-8"?> <web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd" version="3.1"> <filter> <filter-name>springSecurityFilterChain</filter-name> <filter-class>org.springframework.web.filter.DelegatingFilterProxy</filter-class> </filter> <filter-mapping> <filter-name>springSecurityFilterChain</filter-name> <url-pattern>/*</url-pattern> </filter-mapping> <listener> <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class> </listener> <servlet> <servlet-name>my</servlet-name> <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> <load-on-startup>1</load-on-startup> </servlet> <servlet-mapping> <servlet-name>my</servlet-name> <url-pattern>/</url-pattern> </servlet-mapping> <context-param> <param-name>contextConfigLocation</param-name> <param-value>classpath:config/security-config.xml</param-value> </context-param> </web-app>

agregue my-servlet.xml como configuración de contexto de su aplicación web a /webapp/WEB-INF/ . agregar elemento de authentication-manager a my-security.xml :

<?xml version="1.0" encoding="UTF-8"?> <beans:beans xmlns:beans="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://www.springframework.org/schema/security" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/security http://www.springframework.org/schema/security/spring-security.xsd"> <beans:import resource="spring-db.xml" /> <http auto-config="true" use-expressions="true"> <intercept-url pattern="/" access="permitAll" /> </http> <authentication-manager> <authentication-provider> <user-service> <user name="username" authorities="ROLE_ADMIN" password="password" /> </user-service> </authentication-provider> </authentication-manager> </beans:beans>

deshágase de la página de access-denied-page y use el access-denied-handler como lo hizo Mkyong aquí


Creo que solo necesita tener un archivo de configuración xml (my-servlet.xml, ya que el nombre de su servlet es "my", por lo que el nombre del archivo debe ser " my-servlet.xml ") en web-xml y luego referir a otros en ese archivo. Consulte xmls a continuación.

<xml version="1.0" encoding="UTF-8"?> <web-app xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" version="3.0"> <listener> <listener-class>org.apache.tiles.extras.complete.CompleteAutoloadTilesListener</listener-class> </listener> <listener> <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class> </listener> <servlet> <servlet-name>my</servlet-name> <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> <init-param> <param-name>contextConfigLocation</param-name> <param-value>/WEB-INF/my-servlet.xml</param-value> </init-param> <load-on-startup>1</load-on-startup> </servlet> </web-app>

En el archivo my-servlet.xml puede usar la importación para componer sus otras configuraciones XML.

<beans> <bean id="bean1" class="..."/> <bean id="bean2" class="..."/> <import resource="security-db.xml"/> <import resource="foo-db.xml"/> </beans>