inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

스프링 시큐리티

스프링 시큐리티 멀티 로그인 관련 질문드립니다.

1273

김상욱

작성한 질문수 7

0

@Configuration 
@EnableWebSecurity
public class SecurityConfig {
	
   @Bean
   public SecurityFilterChain adminfilterChain(HttpSecurity http) throws Exception { 
	   
        http.authorizeRequests()
	    .requestMatchers("/admin/**").hasRole("ADMIN")
	    .anyRequest().authenticated()
	.and()
	.httpBasic() 
	;
        
      return http.build();
   }
   
   @Bean
   static final public InMemoryUserDetailsManager kk() { //DB연동을 안할 경우, 테스트 용으로 하는 것이다.
       UserDetails user = User.withDefaultPasswordEncoder()
           .username("user")
           .password("1111")
           .roles("USER")
           .build();
       UserDetails admin = User.withDefaultPasswordEncoder()
           .username("admin")
           .password("1111")
           .roles("ADMIN")
           .build();
       return new InMemoryUserDetailsManager(user, admin);
   }
	
}

@Configuration
class config2 {
	
	@Bean
	public SecurityFilterChain userfilterChain(HttpSecurity http) throws Exception { 
		
	    http.authorizeRequests()
	    	.requestMatchers("/user/**").hasRole("USER")
	    	.anyRequest().authenticated()
	    .and()
	    .formLogin() 
	    ;
		
	    return http.build();
	}
}

 

스프링 시큐리티가 최근부터 Bean으로 설정을 해야하며, 강의에서 나온 antmatchers()와 같은 함수명이 바뀌어 구글링을 하며 만들어보고자 도전해보고 있습니다.

해당 강의 중 "다중 보안 설정"에 대한 내용과 유사하게 구현해보고자 하였으나, 마음처럼 되지 않아 질문을 남김니다.

제가 구현하고 싶은 형태는 localhost:8080/user >> formLogin() 페이지로 이동하게 되고, 이와 다르게 localhost:8080/admin >> httpBasic() 페이지로 이동하도록 구현하고자 합니다. 하지만, 생각과는 다르게 admin 경로가 처리가 안되는 것을 확인하였습니다.

이에 대해 조언을 구하고자 합니다.

java spring-boot spring-security

답변 1

0

인프런 AI 인턴

안녕하세요, 인프런 AI 인턴이에요. 스프링 시큐리티 멀티 로그인 관련 질문에 대해 답변드릴게요.

최근 버전의 스프링 시큐리티에서는 자바 기반의 설정을 사용하기 위해 @Configuration 어노테이션이 필요하며, @EnableWebSecurity 어노테이션을 사용하여 웹 보안을 활성화시킬 수 있습니다.

먼저, 첫 번째 SecurityConfig 클래스에서 adminfilterChain() 메소드에 HttpSecurity 객체를 인자로 받아서 처리하고 있습니다. authorizeRequests() 메소드를 사용하여 경로에 대한 접근 권한을 설정하고 있으며, hasRole("ADMIN")으로 “/admin/**” 경로에 대해 “ADMIN” 역할이 있는 사용자만 접근할 수 있도록 설정하고 있습니다. 그리고 .anyRequest().authenticated()는 나머지 모든 요청에 대해서는 인증을 요구하는 것을 의미합니다. 마지막으로 .httpBasic()을 호출하여 http 기본 인증을 사용하도록 설정하고 있습니다.

kk() 메소드는 InMemoryUserDetailsManager를 사용하여 사용자의 인메모리 인증 정보를 설정하고 있습니다. “user”와 “admin” 사용자가 각각 “USER”와 “ADMIN” 권한을 가지고 있으며, 패스워드는 “1111”로 설정되어 있습니다.

두 번째 config2 클래스에서는 userfilterChain() 메소드를 통해 “/user/**” 경로에 대해 “USER” 권한을 가진 사용자만 접근할 수 있도록 설정하고 있습니다. 마지막으로 .formLogin()을 호출하여 폼 기반 인증을 사용하도록 설정하고 있습니다.

이와 같이 각각 다른 경로와 권한에 대해 설정한 두 개의 SecurityFilterChain 빈을 생성하여 멀티 로그인을 구현하고 있습니다.

질문이 있으시면 더 도움을 드릴 수 있도록 알려주세요. 감사합니다.

0

김상욱

알려주신 정보와 같이 저도 알고 있었으나, 해당 코드를 실제 구동시

/admin/**에 대한 경로는 .httpBasic()이 호출되지만,

/user/**해당 경로에 대해서는 .formLogin()이 호출이 되지 않고 바로 페이지가 이동 성공(보안이 뚫림)을 하는 모습을 확인하였습니다. ㅠㅠ

시큐리티 공부 버전 질문

0

176

1

[해결 방법] MethodSecurityConfig.customMethodSecurityMetadataSource() 호출하지 않는 이슈

0

187

1

AbstractSecurityInterceptor.class.beforeInvocation()를 2번 실행하는 경우

0

177

1

강의 코드가 왜이렇게 뒤죽박죽인가요...

0

251

1

메인 페이지로 접속해도 login url로 리다이렉트가 되지 않습니다..

0

236

1

파라미터값이 넘어가지 않습니다 ....

0

374

1

security filterChain 설정 질문이 있습니다.

0

332

1

소스 부분 질문 드립니다.

0

210

2

섹션4 7번 강의 문제가 있는거 같네요.

0

345

2

파일이 수시로 이름이 바껴있네요 ㄷㄷ

0

306

1

HttpSessionSecurityContextRepository를 사용안하는 문제

0

557

2

error , exception 이 잘 안됩니다.

0

284

2

thymeleaf tag 질문합니다.

0

198

2

버전업하면서 deprecated된 것들이 너무많아요

0

478

1

spring security 패치 관련

0

437

1

모바일을 사용할때 토큰말고 세션

0

847

2

DB 연동한 인가 부분에 대한 질문입니다!

0

265

1

Ajax방식도 똑같이 Session방식을 사용하는건가요?

0

308

1

Config 파일 생성 시 질문이 있습니다.

0

228

1

강사님 몇일동안 구글 검색만 100개 했는데도 이유를 모르겠습니다..

1

432

2

403 에러 뜹니다.

0

813

2

login_proc의 존재에 대한 간략한 설명입니다

0

277

1

top.html에 로그인 링크를 만들어서 로그인을 해봤습니다

0

286

2

안녕하세요. DB에 저장될 때 이해 안 가는 값이 있어서 질문드립니다!

0

191

1