-
카테고리
-
세부 분야
백엔드
-
해결 여부
미해결
스프링 시큐리티 멀티 로그인 관련 질문드립니다.
23.07.23 00:43 작성 조회수 800
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 경로가 처리가 안되는 것을 확인하였습니다.
이에 대해 조언을 구하고자 합니다.
답변을 작성해보세요.
0
인프런 AI 인턴
2023.07.25
안녕하세요, 인프런 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
빈을 생성하여 멀티 로그인을 구현하고 있습니다.
질문이 있으시면 더 도움을 드릴 수 있도록 알려주세요. 감사합니다.
김상욱
질문자2023.07.26
알려주신 정보와 같이 저도 알고 있었으나, 해당 코드를 실제 구동시
/admin/**에 대한 경로는 .httpBasic()이 호출되지만,
/user/**해당 경로에 대해서는 .formLogin()이 호출이 되지 않고 바로 페이지가 이동 성공(보안이 뚫림)을 하는 모습을 확인하였습니다. ㅠㅠ
답변 1