스프링 세큐리티를 자바(java config)로 설정하는 방법에 대해 배운것을 간단히 정리해둔다.
https://github.com/SpringSource/spring-security-javaconfig 에서 제공하는 WebSecurityConfigurerAdapter 를 사용한다.
Spring Manve Repository( http://repo.springsource.org/snapshot ) 에서 [group: 'org.springframework.security', name: 'spring-security-javaconfig', version: '1.0.0.CI-SNAPSHOT'] 으로 받아서 써도 된다.
Spring의 EnableXXX방식과 Configurer의 방식을 모두 제공한다.
다음 샘플을 보자.
@Configuration
@EnableWebSecurity
public class WebSecurityConfig extends WebSecurityConfigurerAdapter {
@Autowired
AuthenticationManager authenticationManager; // Spring Security에서 등록하는 빈을 DI 받는다.
@Override
protected void ignoredRequests(IgnoredRequestRegistry ignoredRequests) {
ignoredRequests.antMatchers("/resource/**"); // 리소스에 대해서는 처리하니 않는다.
}
@Override
protected void authorizeUrls(ExpressionUrlAuthorizations interceptUrls) {
interceptUrls
.antMatchers("/app/login/*", "/").permitAll()
.antMatchers("/app/**").hasRole("ADMIN");
}
@Override
protected void configure(HttpConfigurator http) throws Exception {
configureLogin(http);
configureLogout(http);
configureSSOFilter(http);
}
protected void configureLogin(HttpConfigurator http) throws Exception {
http
.formLogin()
.loginPage("/app/login/welcomeToLoginPage") // 로그인 Form을 제공하는 페이지.
.usernameParameter("userName") // 로그인 폼에서 ID를 담는 Input name
.passwordParameter("password") // 로그인 폼에서 PW를 담는 Input name
.loginProcessingUrl("/app/login/checkLogin") // 로그인 폼에서 ID, PW를 전송해야 하는 URL
.defaultSuccessUrl("/app/login/loginSuccess") // 로그인에 성공했을때, Referer가 없을떄 리다이렉트될 URL. 기본구현에서는 Referer가 있으면 Referer로 이동하게 된다.
.failureUrl("/app/login/loginFailed") // 로그인에 실패했을때 리다이렉트 될 URL
.permitAll(); // 이상의 로그인 과정에 필요한 URL들에 대한 접근권한을 허가함
}
protected void configureLogout(HttpConfigurator http) throws Exception {
http
.logout()//
. logoutUrl("/app/logout") // 로그아웃을 처리할 가상 URL
.logoutSuccessUrl("/app/seeYouAgain")//
.permitAll();
}
protected void configureSSOFilter(HttpConfigurator http) throws Exception {
// 여기는 추가적인 필터를 등록하는 법. 대부분의 프로젝트에서 만들어지 추가적인 인증 필터는 UsernamePassword 앞에 추가되면 될듯하다
http
.addFilterBefore(
casSSOAuthenticationProcessingFilter()
, UsernamePasswordAuthenticationFilter.class
);
}
// 여기는 추가적인 필터를 초기화 하는 샘플
@Bean
public CasSSOAuthenticationProcessingFilter casSSOAuthenticationProcessingFilter() {
CasSSOAuthenticationProcessingFilter filter
= new CasSSOAuthenticationProcessingFilter("/app/casSSOLoginProcess");
filter.setAuthenticationManager(authenticationManager);
filter.setAuthenticationSuccessHandler(new CasLoginSuceessHandler());
filter.setAuthenticationFailureHandler(new CasLoginFailureHandler());
return filter;
}
@Override
protected void registerAuthentication(AuthenticationRegistry registry) throws Exception {
// 테스트를 위한 더미 데이터기반의 인증 추가
registry
.inMemoryAuthentication()//
.withUser("user").password("password").roles("USER")
.and()//
.withUser("admin").password("password").roles("USER", "ADMIN");
}
}
스프링 세큐리티를 조금 만져본 사람이면 크게 무리없이 이해될 내용일 것이다.
출처 - http://milines.egloos.com/3953488
'Framework & Platform > Spring' 카테고리의 다른 글
spring data - mongoDB Date type (0) | 2014.01.15 |
---|---|
spring security - How to have spring security context as child context (0) | 2014.01.09 |
spring - apache POI example (0) | 2013.09.26 |
spring - util (0) | 2013.09.05 |
spring - JavaConfig Example (0) | 2013.08.11 |