복붙노트

[SPRING] 예외 발생 : 'springSecurityFilterChain'이라는 bean을 정의하지 않았습니다.

SPRING

예외 발생 : 'springSecurityFilterChain'이라는 bean을 정의하지 않았습니다.

나는 참고 자료에서 봄 보안을 배우고있다. 릴리스 3.1.2. 릴리스. 내가 보안을 설정했다는 것을 진술했다 : http 태그는 다음과 같다.

security-context.xml

<security:http auto-config="true">
        <security:intercept-url pattern="/**" access="ROLE_USER"/>
    </security:http>

을 포함한다.

<context-param>
    <param-name>contextConfigLocation</param-name>
    <param-value>classpath*:*-context.xml</param-value>
  </context-param>

  <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>security</servlet-name>
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
    <load-on-startup>1</load-on-startup>
  </servlet>

  <servlet-mapping>
    <servlet-name>security</servlet-name>
    <url-pattern>/</url-pattern>
  </servlet-mapping>

security-servlet.xml

<context:component-scan base-package="com.pokuri.security.mvc.controllers"/>

    <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
        <property name="viewClass" value="org.springframework.web.servlet.view.JstlView"/>
        <property name="prefix" value="/WEB-INF/page/"/>
        <property name="suffix" value=".jsp"/>
    </bean>

하지만 응용 프로그램을 시작할 때이 예외가 발생합니다. 보안 구성을 제거하면 스프링 웹 응용 프로그램이 정상적으로 작동합니다. stackoverflow에서 같은 종류의 질문을했습니다. 그러나 운이 없다.

해결법

  1. ==============================

    1.제 생각에는 스프링 보안을위한 XML 설정 파일이 웹 앱을 시작할 때로드되지 않는다는 것입니다.

    제 생각에는 스프링 보안을위한 XML 설정 파일이 웹 앱을 시작할 때로드되지 않는다는 것입니다.

    이 문제를 해결하려면 web.xml에서 모든 XML 구성 파일을 다음과 같이 지정해야합니다.

    <context-param>
        <param-name>contextConfigLocation</param-name>
        <param-value>/WEB-INF/spring-security.xml, /WEB-INF/applicationContext.xml</param-value>
    </context-param>
    

    설정 파일이 classpath (WEB-INF 폴더가 아닌 폴더 또는 하위 폴더)에 있으면 다음과 같이 설정 파일 목록을 지정할 수 있습니다.

    ...
    <param-value>
        classpath:applicationContext.xml,
        classpath:spitter-security.xml
    </param-value>
    ...
    

    또한 설정 파일을로드 할 특별한 리스너를 추가해야합니다.

    <listener>
        <listener-class>
            org.springframework.web.context.ContextLoaderListener
        </listener-class>
    </listener>
    
  2. ==============================

    2.Spring이 요청할 때 bean 정의를 applicationContext.xml에 추가했습니다.

    Spring이 요청할 때 bean 정의를 applicationContext.xml에 추가했습니다.

    <bean id="springSecurityFilterChain" class="org.springframework.web.filter.DelegatingFilterProxy"/>
    
  3. ==============================

    3.web.xml을 추가하십시오.

    web.xml을 추가하십시오.

    <context-param>
        <param-name>contextConfigLocation</param-name>
        <param-value>/WEB-INF/root-context.xml, /WEB-INF/spring-security.xml</param-value>
    </context-param>
    
    <!-- Creates the Spring Container shared by all Servlets and Filters -->
    <listener>
        <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
    </listener>
    
            <!-- filter declaration for Spring Security -->
    <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>
    
  4. ==============================

    4.도움이되는 경우, 필자는 패키지 중 하나의 이름을 변경했지만 Eclipse가 @ComponentScan 경로를 자동으로 업데이트하지 않으므로이를 변경해야합니다.

    도움이되는 경우, 필자는 패키지 중 하나의 이름을 변경했지만 Eclipse가 @ComponentScan 경로를 자동으로 업데이트하지 않으므로이를 변경해야합니다.

    @ComponentScan(basePackages = "com.package.spring")
    
  5. from https://stackoverflow.com/questions/12123516/getting-exception-no-bean-named-springsecurityfilterchain-is-defined by cc-by-sa and MIT license