Table of Contents

Spring Security 이해와 활용

1.개요 - Spring security

2.기본설정 - maven 설정

Dependency 추가

snippet.xml
<!-- Spring Security -->
<dependency>            
  <groupId>org.springframework.security</groupId>            
  <artifactId>spring-security-core</artifactId>            
  <version>${spring.maven.artifact.version}</version>        
</dependency>
 
<dependency>            
  <groupId>org.springframework.security</groupId>            
  <artifactId>spring-security-web</artifactId>            
  <version>${spring.maven.artifact.version}</version>        
</dependency>
 
<dependency>            
  <groupId>org.springframework.security</groupId>            
  <artifactId>spring-security-config</artifactId>            
  <version>${spring.maven.artifact.version}</version>        
</dependency>

3개를 추가한다.

taglib 사용시 추가

snippet.xml
<!-- Spring Security tag library -->        
<dependency>            
  <groupId>org.springframework.security</groupId>            
  <artifactId>spring-security-taglibs</artifactId>            
  <version>${spring.maven.artifact.version}</version>        
</dependency>

egovframework Dependency 추가

snippet.xml
<!-- Security -->        
<dependency>            
  <groupId>egovframework.rte</groupId>
  <artifactId>egovframework.rte.fdl.security</artifactId>            
  <version>2.6.0</version>        
</dependency>

web.xml

snippet.xml
<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>

filterchain을 사용한다.

2. 기본설정 - DelegatingFilterProxy

2. 기본설정 - security 설정

context-security.xml

snippet.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">        
    <intercept-url pattern="/sample/add*" access="ROLE_ADMIN" />        
    <intercept-url pattern="/sample/update*" access="ROLE_ADMIN" />        
    <intercept-url pattern="/sample/delete*" access="ROLE_ADMIN" />        
    <intercept-url pattern="/**" access="ROLE_USER" />    
  </http>    	
 
<!-- `In-Memory authentication` -->
  <authentication-provider>		
    <user-service>			
      <user name="user" password="user" authorities="ROLE_USER" />			
      <user name="admin" password="admin" authorities="ROLE_USER, ROLE_ADMIN" />
    </user-service>	
  </authentication-provider>	
</beans:beans> 

authentication-manager 사용. In-Memory authentication

snippet.xml
<authentication-manager>		
  <authentication-provider>			
    <user-service>				
      <user name="user" password="user" authorities="ROLE_USER" />				
      <user name="admin" password="admin" authorities="ROLE_USER, ROLE_ADMIN" />
    </user-service>		
  </authentication-provider>	
</authentication-manager>	

3. Form & Basic 로그인 - auto-config

auto-config-="true"

snippet.html
<http>     
  <form-login />     
  <logout /> 
</http>

<http /> 설정 변경

snippet.xml
<http access-denied-page="/common/accessDenied.jsp" lowercase-comparisons="false">
  <intercept-url pattern="/common/**" access="IS_AUTHENTICATED_ANONYMOUSLY" /> 
  <intercept-url pattern="/css/**" filters="none" /> 
  <intercept-url pattern="/images/**" filters="none" /> 
  <intercept-url pattern="/sample/add*" access="ROLE_ADMIN" /> 
  <intercept-url pattern="/sample/update*" access="ROLE_ADMIN" /> 
  <intercept-url pattern="/sample/delete*" access="ROLE_ADMIN" /> 
  <intercept-url pattern="/**" access="ROLE_USER" />        
  <form-login login-page="/common/login.jsp" authentication-failure-url="/common/login.jsp?fail=true" /> 
  <logout logout-success-url="/common/logout.jsp" /> 
  <anonymous /> 
</http>

설정변경

snippet.xml
<http pattern="/css/**" security="none"/>    
<http pattern="/images/**" security="none"/>

4. Database 확장 - 인증 확장 설정

EgovJdbcUserDetailsManager 적용

snippet.xml
<beans:bean id="jdbcUserService" class="egovframework.rte.fdl.security.userdetails.jdbc.EgovJdbcUserDetailsManager">
  <beans:property name="usersByUsernameQuery"    
    value="SELECT USER_ID,PASSWORD,ENABLED,USER_NAME FROM USERS WHERE USER_ID = ? "/>  
  <beans:property name="authoritiesByUsernameQuery"    
    value="SELECT USER_ID,AUTHORITY FROM AUTHORITIES WHERE USER_ID = ? "/>      
  <beans:property name="roleHierarchy" ref="roleHierarchy" />  
  <beans:property name="dataSource" ref="dataSource" />  
  <beans:property name="mapClass"          
    value="egovframework.rte.cmmn.security.EgovUserDetailsMapping" /> 
</beans:bean>