# Spring Security] 로그인 화면 없애기

조현수·2023년 7월 7일
0

스프링

목록 보기
2/3

Spring security login화면 없애기

spring security를 설치하고 처음 구동을 하게 되면

바로 이 화면이 뜨게 된다.

일단 시큐리티 5버전 이하라면

@EnableWebSecurity
public class SecurityConfig extends WebSecurityConfigurerAdapter {

    @Override
    protected void configure(HttpSecurity http) throws Exception {
        http.csrf().disable()
            .authorizeRequests()
                .anyRequest().permitAll();
    }
}

이렇게 처리하면 그만이다.

시큐리티 5이상에서는 WebSecurityConfigurerAdapter 가 사용권장되지 않으므로 다른 방식으로 메서드체이닝을 구성해야한다

시큐리티5의 바뀐 해결책

Spring Security without the WebSecurityConfigurerAdapter

에서 보게되면 WebSecurityConfigurerAdapter

를 상속받는 대신에 SecurityFilterChainbean을 등록하면 된다고 나와있다


@EnableWebSecurity
@AllArgsConstructor
@Configuration
public class SecurityConfig {
	@Bean
		public SecurityFilterChain securityFilterChain(HttpSecurity http) throws Exception {
			http.csrf().disable()
					.authorizeRequests()
					.anyRequest().permitAll();
			return http.build();
		}
}

위의 코드는 csrf를 막는코드이고

http.authorizeRequests().antMatchers("/**").permitAll()
				.anyRequest().authenticated();
		return http.build();

이렇게 추가해주면 모든 주소에 대한 권한을 풀어주어 어떤 화면이든 login 없이 이용할수 있게 된다.

짠 그러면 login 화면이 더이상 안보인다 !!!

profile
얼레벌레 꾸준히 하는 사람

1개의 댓글

comment-user-thumbnail
2023년 12월 1일

안녕하세요. Spring security login화면 없애기를 하고 있는데요. 구글링을 하다 보니 작성하신 해결 방법을 보게 되었는데요. 며칠 동안 해결을 하지 못해서 문의 드립니다.

현재 환경은 <spring.maven.artifact.version>4.0.9.RELEASE</spring.maven.artifact.version> <egovframework.rte.version>3.5.0</egovframework.rte.version>이고
context-security.xml 구조가 아래 처럼 되어 있습니다.

<security:http pattern="/css/**" security="none"/>
<security:http pattern="/images/**" security="none"/>

<security:http pattern="/js/" security="none"/>
<security:http pattern="/resource/
" security="none"/>
<security:http pattern="\A/WEB-INF/jsp/.*\Z" request-matcher="regex" security="none"/>

<egov-security:config id="securityConfig"
loginUrl="/j_spring_security_check"
logoutSuccessUrl="/logout.jsp"
loginFailureUrl="/uat/uia/egovLoginUsr.do?login_error=1"
accessDeniedUrl="/sec/ram/accessDenied.do"

	dataSource="dataSource"
	jdbcUsersByUsernameQuery="SELECT USER_ID, UNIQ_ID AS PASSWORD, 1 ENABLED, USER_NM, EMPL_NO, USER_ZIP,  
                                                          USER_ADRES, USER_EMAIL, USER_SE, ORGNZT_ID, UNIQ_ID,
                                                          INSTT_CODE, INSTT_NAME, DEPT_NAME, DEPT_CODE, 
                                                          MOBLPHON_NO, AUTHOR_CODE, LAST_PASSWORD_UPDATE, 
                                                          PASSWORD AS USER_PASSWORD, SUB_DN,
                                                          TOP_OU_CODE, TOP_OU_NAME, OFCPS_NM, PW2_INIT,
                                                          EMPLYR_STTUS_CODE
                                                     FROM 테이블 WHERE CONCAT(USER_SE, USER_ID) = ?"
	jdbcAuthoritiesByUsernameQuery="SELECT A.SCRTY_ESTBSTRGET_ID USER_ID, A.AUTHOR_CODE AUTHORITY 
                                                           FROM 테이블 A, 테이블 B 
                                                          WHERE A.SCRTY_ESTBSTRGET_ID = B.UNIQ_ID AND B.USER_ID = ?"
	jdbcMapClass="egovframework.com.sec.security.common.EgovSessionMapping"

	requestMatcherType="regex"
	hash="plaintext"
	hashBase64="false"

	concurrentMaxSessons="1"
	concurrentExpiredUrl="/logout.jsp"

	defaultTargetUrl="/h/Home.do"
/>

<egov-security:secured-object-config id="securedObjectConfig"
	sqlHierarchicalRoles="
		SELECT a.CHILD_ROLE child, a.PARENT_ROLE parent
		FROM 테이블 a LEFT JOIN 테이블 b on (a.CHILD_ROLE = b.PARENT_ROLE)"
	sqlRolesAndUrl="
		SELECT a.ROLE_PTN url, b.AUTHOR_CODE authority
		FROM 테이블 a, 테이블 b
		WHERE a.ROLE_CODE = b.ROLE_CODE
			AND a.ROLE_TYP = 'url'  ORDER BY a.ROLE_SORT"
	sqlRolesAndMethod="
		SELECT a.ROLE_PTN [method], b.AUTHOR_CODE authority
		FROM 테이블 a, 테이블 b
		WHERE a.ROLE_CODE = b.ROLE_CODE
			AND a.ROLE_TYP = 'method'  ORDER BY a.ROLE_SORT"
	sqlRolesAndPointcut="
		SELECT a.ROLE_PTN pointcut, b.AUTHOR_CODE authority
		FROM 테이블 a, 테이블 b
		WHERE a.ROLE_CODE = b.ROLE_CODE
			AND a.ROLE_TYP = 'pointcut'  ORDER BY a.ROLE_SORT"
	sqlRegexMatchedRequestMapping="
		SELECT a.resource_pattern uri, b.authority authority
		FROM 테이블 a, 테이블 b
		WHERE a.resource_id = b.resource_id
			AND a.resource_type = 'url'"
/>

<egov-security:initializer id="initializer"
	supportMethod="true"
	supportPointcut="false"
/>

로그인 시 타는 class 는 아래 처럼 되어 있습니다.
public String getRequestURI()
{
return ((HttpServletRequest)super.getRequest()).getContextPath() + "/j_spring_security_check";
}

public String getParameter(String name)
{
if (name.equals("j_username")) {
return this.username;
}
if (name.equals("j_password")) {
return this.password;
}
return super.getParameter(name);
}

시큐리티 5버전 이하 버전에 대한 해결 방법이 있는데 5이하 버전을 context-security.xml에서 확인 해야 하나요? 아니면 다른 곳에서 확인을 해야 하는지 문의 드립니다.

저의 구조인 경우에는 Spring security login화면 없애려면 어떤 설정을 해야 하는지 조금이라도 도움을 주시면 너무 감사하겠습니다.

그럼 즐거운 금요일 보내세요~

답글 달기