주소 설정하고 SecurityConfig  설정하기

 

 

주소 설정

시큐리티가 인증이 없다면 모든 페이지 이동을 막기 때문에 

인증이 필요없는 페이지는 주소에 /auth 붙여서 인증없이 들어갈 수 있도록 해야한다. 

  • 인증이 안된 사용자들이 출입할 수 있는 경로를 /auth/** 허용
  • 그냥 주소가 / 이면 index.jsp 허용
  • static 이하에 있는 /js/** , /css/**, /image/** 도 허용

일부만 예를들자면 

 

[UserController]

@GetMapping("/auth/joinForm")

@GetMapping("/auth/loginForm")

▶ 회원가입, 로그인 페이지도 인증 없이 들어가야한다

 

 

[UserApiController]

@PostMapping("/auth/joinProc")

회원가입 post매핑에도 /auth 하고 주소변경

 

 

[heder.jsp]

네브바에 있는 [로그인, 회원가입] 주소에 /auth 붙여서 인증 필요없도록 만들고

로그인 후 네브바에 있는 [글쓰기, 회원정보, 로그아웃]은 인증이 필요해서 /auth 붙이지 않는다

 

 

 

 

SecurityConfig 설정

** config 패키지  - SecurityConfig 클래스 생성

 

SecurityConfig 오버라이드 하기 

// 빈 등록 : 스프링 컨테이너에서 객체를 관리할 수 있게 하는 것
@Configuration // 빈등록(loC 관리)
@EnableWebSecurity // 시큐리티 필터 추가 = 스프링 시큐리티가 활성화가 되어 있는데 어떤 설정을 해당파일에서 하겠다 
public class SecurityConfig extends WebSecurityConfigurerAdapter{

    @Override
    protected void configure(HttpSecurity http) throws Exception {
        http
            .authorizeRequests()
                .antMatchers("/","/auth/**", "/js/**", "/css/**","/image/**") 
                .permitAll()
                .anyRequest()     // 나머지 요청들은
                .authenticated(); // 인증이 되어야한다.
            .and()
                .formLogin()
                .loginPage("/auth/loginForm");
    }
}

** 혹시나 WebSecurityConfigurerAdapter 에 밑줄이 그어져있다면.

spring security 5.7이상에서 더 이상 WebSecurityConfigurerAdapter 사용을 권장하지 않는다고 한다.

 

 

HttpSecurity 클래스의 메서드 설명

리소스(url)의 권한 설정을 할 수 있다.

  • .authorizeRequests() : request 요청이 들어오면 보안검사 시작
  • .antMatchers : 특정 소스에 대해 권한 설정인데 .permitAll() 이 붙으면 antMatchers 설정한 리소스의 접근을 인증절차                         없이 허용
  • .anyRequest() : 나머지 요청들의 리소스(url)들은
  • .authenticated() : 인증해야 접근가능
  • .and()  인증이 필요하기 때문에 로그인 페이지로 이동
                .formLogin()  : form 로그인 방식
                .loginPage("/auth/loginForm");  : 로그인 페이지의 주소

▶ .antMatchers("/","/auth/**", "/js/**", "/css/**","/image/**") 

인증절차 없이 허용가능하도록 한 주소 

 

"/auth/**" 이외 다른 주소들은 왜 포함했는지?

회원가입 할때 자바스크립트 ajax 를 이용했고 회원가입 후 "/" 메인주소로 이동하는데 인증절차 없이 모두 이동가능하도록 

 

▶ anyRequest() 부터 이어서 읽자면 

 /auth 가 아닌 나머지 요청들은 인증을 해야 접근이 가능하고 인증이 필요하기에 로그인 페이지로 바로 이동한다

그래서 http://localhost:8000/ 주소를 치면 .loginPage("/auth/loginForm") 로그인 페이지로 이동

 

 

 

 

시큐리티 어노테이션 꼭 붙어있어야하는 세트 설명
@Configuration  @EnableWebSecurity @EnableGlobalMethodSecurity(prePostEnabled = true)

@Configuration 어노테이션은 빈에 등록하는 annotation (loC 관리) 이다.

 

@EnableWebSecurity 어노테이션은 웹보안 활성화를위한 annotation 이고

스프링 시큐리티가 활성화가 되어 있을때 어떤 설정을 해당파일(SecurityConfig)에서 하겠다 라는 말인데

즉 시큐리티 필터가 등록이 된다. 

 

@EnableGlobalMethodSecurity(prePostEnabled = true) 어노테이션은 특정 주소로 접근을 하면 권한 및 인증을 미리 체크하겠다.

 

 

이 세개의 어노테이션은 세트다.

 

 

반응형
LIST

+ Recent posts