어제, 오늘 양일간 JPA를 이용한 로그인 기능을 만들기 위해서 맨땅에 헤딩을 제대로 했다. 근데 글쓰기 폼이 바꼈넹? ㅎㅎㅎ
아직도 정확하게 이해는 못했지만 스프링부트의 속살까지 파악하는 것이 최종 목표이다.
로그인을 위해서 WebSecurityConfigurerAdapter를 상속받은 SecurityConfig 클래스에서 했던 많은 것들이 특히 인상적이다.
@Override
protected void configure(HttpSecurity http) throws Exception {
/**
* 로그인 disable 처리
*/
http.cors().and();
http.csrf().disable();
http.headers().frameOptions().sameOrigin();
http
.authorizeRequests()
.antMatchers("/").access("hasRole('ADMIN')")
.antMatchers("/**").permitAll()
// 해당 url을 허용한다.
//.antMatchers("/resources/**","/loginError","/static/**","/h2console/**").permitAll()
// admin 폴더에 경우 admin 권한이 있는 사용자에게만 허용
.antMatchers("/admin/**").hasAuthority("ADMIN")
// user 폴더에 경우 user 권한이 있는 사용자에게만 허용
//.antMatchers("/user/**").hasAuthority("USER")
//.anyRequest().authenticated()
.and()
.formLogin()
.passwordParameter("admin_pwd")
.usernameParameter("admin_id")
.loginPage("/login")
.successHandler(new CustomAuthenticationSuccess()) // 로그인 성공 핸들러
.failureHandler(new CustomAuthenticationFailure()) // 로그인 실패 핸들러
.permitAll()
.and()
.logout()
.permitAll()
.and()
.exceptionHandling().accessDeniedPage("/403"); // 권한이 없을경우 해당 url로 이
}
오.. 이제 이런것도 들어가는군 ^^;
인터넷 검색을 통해 받은 configure함수 내용인데 몇가지 중요한 항목에 대해서만 명시를 한다.
관리자 사이트에 spring-boot-starter-security 의존성을 추가하므로 spring security 인증을 사용한다고 명시하였다.
메이븐의 경우
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-security</artifactId>
</dependency>
.formLogin() 은 스프링 시큐어리티의 인증 폼을 사용하지 않고 커스텀된 폼을 사용하겠다는 의미이며
.passwordParameter("admin_pwd")와 usernameParameters("admin_id")는 html form에 input tag의 name을 매핑하는 것이다.
스프링 시큐리어티의 특성상 username을 사용하고 있기 때문에 이런 매핑은 상당히 괜찮은 것 같다.
사이트가 시작하자마자 세션을 체크해서 로그인 페이지로 이동하게끔 처리하는 코드의 경우
.antMatchers("/").access("hasRole('ADMIN')") 을 통해 제어가 가능하고 DefaultController에서 @RequestMapping을 통해 처리하면 된다.
힘든 한고비를 넘긴거지만 많은 경험과 공부가 된 하루. 스프링도 만만치 않지만 할 일이 태산이다. @@
'프로그래밍 > Spring' 카테고리의 다른 글
@Data, Lombok 어노테이션 (0) | 2019.04.08 |
---|---|
Spring DispatcherServlet과 MVC아키첵처 (0) | 2019.03.28 |
spring-boot-starter-security 403 Forbidden 에러 대처 (4) | 2019.03.26 |
19. 스위프트의 접근제어 (0) | 2019.02.25 |
18. 인스턴스의 생성과 소멸 (0) | 2019.02.25 |