아래와 같이 각 CRUD에 대한 매핑을 마쳤다면 특정 페이지는 권한 부여 없이도 접근이 가능하겠지만,
개인정보나 중요한 메시지가 담긴 페이지들에 대해서는 권한을 갖고 있는 사용자만 접근이 가능하도록 설정을 해주어야 한다.
package com.hansol.photogramstart;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
@Controller
public class ViewControllerTest {
@GetMapping("/auth/signup")
public String signupPage() {
return "auth/signup";
}
@GetMapping("/auth/signin")
public String signinPage() {
return "auth/signin";
}
@GetMapping("/image/story")
public String storyPage() {
return "image/story";
}
@GetMapping("/image/popular")
public String popularPage() {
return "image/popular";
}
@GetMapping("/image/upload")
public String uploadPage() {
return "image/upload";
}
@GetMapping("/user/profile")
public String profilePage() {
return "user/profile";
}
@GetMapping("/user/update")
public String updatePage() {
return "user/update";
}
}
먼저 @Configuration를 통해 Config 파일이라는 것을 IoC에 등록해준다.
그리고 @EnableWebSecurity 어테이션으로 해당 파일로 시큐리티를 활성화 할 것임을 알려준다.
이후 Security Config와 관련된 설정들을 커스터마이징 해준다.
package com.hansol.photogramstart.config;
import org.springframework.context.annotation.Configuration;
import org.springframework.security.config.annotation.web.builders.HttpSecurity;
import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity;
import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter;
@EnableWebSecurity //해당 파일로 시큐리티를 활성화
@Configuration //IoC 등록
public class SecurityConfig extends WebSecurityConfigurerAdapter {
@Override
protected void configure(HttpSecurity http) throws Exception {
//super.configure(http);
//super.configure(http)를 삭제하면, 기존 시큐리티가 가지고 있던 기능이 모두 비활성화 됨
http.authorizeRequests()
.antMatchers("/", "/user/**", "/image/**", "/subscribe/**", "/comment/**").authenticated()
.anyRequest().permitAll()
.and()
.formLogin()
.loginPage("/auth/signin")
.defaultSuccessUrl("/");
// "/", "/user/**", "/image/**", "/subscribe/**", "/comment/**"와 같은 요청이 왔을 경우에는 인증이 필요함.
// 그 이외의 요청에 대해서는 모두 권한 없이도 접근이 가능하도록 설정.
// 접근이 필요한 페이지에 대해서 접근을 요청할 경우, 접근 권한이 없다면 로그인 페이지를 보여주어 권한을 갖도록 유도함.
}
}