Spring Security 설정을 위한 SecurityConfig.java를 생성한다.
# 코드 전문
@EnableWebSecurity
@EnableGlobalMethodSecurity(prePostEnabled = true) // 특정 주소 접근 시 권한/인증 체크
public class SecurityConfig extends WebSecurityConfigurerAdapter {
@Override
public void configure(WebSecurity web) throws Exception {
web.ignoring().antMatchers("/css/**", "/js/**", "/assets/**", "/font/**", "/stadiumImg/**");
}
@Override
protected void configure(HttpSecurity http) throws Exception {
http.csrf().disable() // csrf토큰 비활성화(csrf토큰이 있어야 접근 가능)
.authorizeRequests() // 인가 요청이 오면
.antMatchers( // 해당 경로는
"/", "/main", "/signup", "/login", "/stadium", "/team", "/checkEmail"
, "/landers", "/landers/"
, "/heroes", "/heroes/"
, "/twins", "/twins/"
, "/wiz", "/wiz/"
, "/tigers", "/tigers/"
, "/bears", "/bears/"
, "/giants", "/giants/"
, "/dinos", "/dinos/"
, "/lions", "/lions/"
, "/eagles", "/eagles/"
)
.permitAll() // 접근을 허용
.anyRequest() // 이외의 요청은
.authenticated() //인증이 되야 들어갈 수 있다.
.and()
.formLogin()
.loginPage("/login") //로그인 페이지를 우리가 만든 페이지로 등록한다.
.loginProcessingUrl("/login") //스프링 시큐리티가 해당 주소로 요청오는 로그인을 가로채서 대신 로그인해줌(서비스의 loadUserByName로 알아서)
.defaultSuccessUrl("/") //정상일 때
// 로그아웃
.and().logout()
.logoutUrl("/logout")
.logoutSuccessUrl("/");
//중복 로그인
http.sessionManagement()
.maximumSessions(1) //세션 최대 허용 수
.maxSessionsPreventsLogin(false); // false이면 중복 로그인하면 이전 로그인이 풀린다.
}
}
1. 인증 없이 접근 허용할 경로 설정
@Override
public void configure(WebSecurity web) throws Exception {
web.ignoring().antMatchers("/css/**", "/js/**", "/assets/**", "/font/**", "/stadiumImg/**");
}
- 인증을 무시할 경로를 설정한다.
- antMatchers()에 경로를 작성하지 않으면 비로그인시 해당 경로에 접근할 수 없다. 그렇기 때문에 기본적인 css, js, font, img를 반드시 접근 가능하도록 설정해야 한다.
2. Http 관련한 인증 설정
protected void configure(HttpSecurity http) throws Exception {
http.csrf().disable() // csrf토큰 비활성화(csrf토큰이 있어야 접근 가능)
.authorizeRequests() // 인가 요청이 오면
.antMatchers( // 해당 경로는
"/", "/main", "/signup", "/login", "/stadium", "/team", "/checkEmail"
, "/landers", "/landers/"
, "/heroes", "/heroes/"
, "/twins", "/twins/"
, "/wiz", "/wiz/"
, "/tigers", "/tigers/"
, "/bears", "/bears/"
, "/giants", "/giants/"
, "/dinos", "/dinos/"
, "/lions", "/lions/"
, "/eagles", "/eagles/"
)
.permitAll() // 접근을 허용
.anyRequest() // 이외의 요청은
.authenticated() // 인증이 되야 들어갈 수 있다.
.and()
.formLogin()
.loginPage("/login") //로그인 페이지를 우리가 만든 페이지로 등록한다.
.loginProcessingUrl("/login") //스프링 시큐리티가 해당 주소로 요청오는 로그인을 가로채서 대신 로그인해줌(서비스의 loadUserByName로 알아서)
.defaultSuccessUrl("/") //정상일떄
// 로그아웃
.and().logout()
.logoutUrl("/logout")
.logoutSuccessUrl("/");
//중복 로그인
http.sessionManagement()
.maximumSessions(1) //세션 최대 허용 수
.maxSessionsPreventsLogin(false); // false이면 중복 로그인하면 이전 로그인이 풀린다.
}
authorizeRequests()
- URL별 권한 관리를 설정한다.
- 이어서 antMatchers()를 이용하여 인증없이 접근이 가능한 URL을 설정한다.
antMatchers()
- 권한 관리 대상을 지정한다.
- URL 또는 HTTP 메소드 별로 관리가 가능하다.
permitAll()
- 앞에 선언한 URL은 누구나 접근이 가능하다.
hasRole()
- 앞에 선언한 URL은 해당 권한이 있어야 접근 가능하다.
anyRequest()
- 앞에 선언한 URL 이외의 주소들을 의미한다.
authenticated()
- 권한이 있으면 접근 가능하다.
formLogin()
- 로그인을 설정한다.
loginPage()
- 로그인 페이지를 설정한다.
loginProcessingUrl()
- Spring Security가 해당 주소로 요청오는 로그인을 가로채서 대신 로그인처리한다.
defaultSuccessUrl()
- 로그인에 성공하면 설정한 URL로 이동한다.
logout()
- 로그아웃을 설정한다.
logoutSuccessUrl()
- 로그아웃에 성공하면 설정한 URL로 이동한다.
sessionManagement()
- 세션 관련 내용을 설정한다.
maximunSession()
- 최대 허용 가능한 세션 수를 설정한다. 무제한일 경우 -1을 입력한다.
maxSessionsPreventsLogin()
- true: 중복으로 로그인을 진행했을 때 신규 로그인 사용자의 인증을 실패시킨다.
- false: 중복으로 로그인을 진행했을 때 이전 로그인 사용자의 세션을 만료시킨다.
3. Controller에서 login 클래스를 생성한다.
@GetMapping("/login")
public String login(HttpServletRequest request, Model model){
return "common/login";
}
앞에서 SecurityConfig의 loginProcessiongUrl에 로그인 주소를 입력해주었다.
따라서 사용자가 로그인을 시도하기 위해 Controller에 접근하면 Security에서 자동으로 로그인 처리를 진행해준다.
'BACK-END > Spring Security' 카테고리의 다른 글
게시글 등록하기(이미지 등록 및 미리보기) (0) | 2022.10.20 |
---|---|
[Spring Security] 회원가입 (0) | 2022.09.26 |