[eclipse]_spring_security 설치

2022. 12. 12. 16:58[Spring]_/[Eclipse]

728x90
반응형

개요

Intellij를 사용하다가 다음 프로젝트가 Eclipse 환경으로 인해

Eclipse 에 spring 최신버전을 설치하였고

SpringSecurity 를 설치 하는 과정 설명

 

환경 

Eclipse 최신버전 2022-09 (4.25.0)

Tomcat - 10.0.23  v

maven Artifact ID : maven-archetype-webapp 1.4v

Spring 6.0.2 ver

Spring Security 6.0.0 ver

 

특이사항

Spring 최신버전부터는 servlet 버전으로 인하여 tomcat version 을 10이상으로 설치하여야 합니다.

다음 포스트 참고

https://yn971106.tistory.com/161

 

[Eclipse]_Spring 최신 버전 servlet 오류(feat.jakarta error)

개요 Intellij를 사용하다가 다음 프로젝트가 Eclipse 만 사용가능하다 하여 환경 구현 실습 연습을 위해 가장 최신버전 채택하여 진행중 만난 오류사항 및 해결방법 설명 환경 Eclipse 최신버전 2022-09

yn971106.tistory.com

 

하위 포스트의 후속내용입니다.

https://yn971106.tistory.com/162

 

[eclipse]_Spring 설치 및 구현

개요 Intellij를 사용하다가 다음 프로젝트가 Eclipse 환경으로 인해 Eclipse 에 spring 최신버전을 설치하는 과정 설명 환경 Eclipse 최신버전 2022-09 (4.25.0) Tomcat - 10.0.23 v maven Artifact ID : maven-archetype-webapp 1

yn971106.tistory.com


연동과정

1.pom.xml 수정

  <!-- https://mvnrepository.com/artifact/org.springframework.security/spring-security-core -->
<dependency>
    <groupId>org.springframework.security</groupId>
    <artifactId>spring-security-core</artifactId>
    <version>6.0.0</version>
</dependency>

<!-- https://mvnrepository.com/artifact/org.springframework.security/spring-security-web -->
<dependency>
    <groupId>org.springframework.security</groupId>
    <artifactId>spring-security-web</artifactId>
    <version>6.0.0</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.springframework.security/spring-security-config -->
<dependency>
    <groupId>org.springframework.security</groupId>
    <artifactId>spring-security-config</artifactId>
    <version>6.0.0</version>
</dependency>

2. web.xml 수정

<!DOCTYPE web-app PUBLIC
 "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
 "http://java.sun.com/dtd/web-app_2_3.dtd" >

<web-app>
  <display-name>Archetype Created Web Application</display-name>
   
 
  <context-param>
        <param-name>contextConfigLocation</param-name>
        <param-value>classpath:spring/*Context.xml</param-value>
</context-param>
	<listener>
		<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
	</listener>

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

  <servlet>
        <servlet-name>dispatcher</servlet-name>
        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
        <init-param>
            <param-name>contextConfigLocation</param-name>
            <param-value>
            	/WEB-INF/spring/dispatcher-servlet.xml
            </param-value>
            
        </init-param>
        <load-on-startup>1</load-on-startup>
    </servlet>
    <servlet-mapping>
		<servlet-name>dispatcher</servlet-name>
		<url-pattern>/</url-pattern>
	</servlet-mapping>
    <servlet-mapping>
        <servlet-name>dispatcher</servlet-name>
        <url-pattern>*.view</url-pattern>
    </servlet-mapping>
    <servlet-mapping>
        <servlet-name>dispatcher</servlet-name>
        <url-pattern>*.do</url-pattern>
    </servlet-mapping>
    
<welcome-file-list>
        <welcome-file>index.jsp</welcome-file>
    </welcome-file-list>
 
</web-app>

디렉토리 구조

주의 : bean 생성을 하기 전에 filter 가 먼저 실행 될 경우

Error creating bean with name 'org.springframework.security.filterChains': Cannot resolve reference to bean 'org.springframework.security.web.DefaultSecurityFilterChain#0' while setting bean property 'sourceList' with key [0]

오류가 발생 할 수 있음. 

 

원래 filter가 먼저 온 뒤 component 스캔 context가 올라가는 순서로 했다가 위의 오류가 발생하여 한참 해매다가

순서를 바꾸니 정상작동하였음.


3. securityContext.xml 파일 생성

 

contextconfigLocation 에 지정한 위치에 파일으 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.xsd
                                 http://www.springframework.org/schema/security
                                 http://www.springframework.org/schema/security/spring-security.xsd">
        
        <http auto-config="true" use-expressions="true">
<!--             <intercept-url pattern="/**" access="ROLE_USER" /> -->
            <intercept-url pattern="/**" access="permitAll"/>
        </http>
        
        <authentication-manager>
            <authentication-provider>
                <user-service>
                    <user name="user" password=" {noop}userPw" authorities="ROLE_USER"/>
                    <user name="guest" password=" {noop}guest" authorities="ROLE_GUEST"/>
                </user-service>
            </authentication-provider>
        </authentication-manager>
    
</beans:beans>

 

주의 use-expressions="true" 로 지정하지 않을 경우

 다음과 같은 오류가 발생할 수 있음

Configuration problem: AuthorizationManager must be used with `use-expressions="true"

 

우선 /** -> 모든 url 입력시 permitAll 로 전부 접속 가능하도록 설정하였습니다.


4. 빌드 및 실행

./login 로 들어올 경우 springsecurity 에서 자동생성해주는 login page로 이동하게 되면 정상 작동하는 것입니다.

 

다음에는 해당 페이지를 사용자가 직접 커스텀하는 방식과

 

DB 연동하여 조회후 DB에 저장된 유저 체크를 해보도록 하겠습니다.

 

감사합니다.

728x90
반응형