일단 스프링 시큐리티를 사용하기 위해서는 스프링부트 프로젝트에 dependencies 를 수정해야 한다.

다섯 번째는 SpringSecurity 를 사용하기 위해서 작성하고 여섯 번째는 thymeleaf 에서 SpringSecurity 를 사용하기 위해서 작성한다.
우선 스프링 시큐리티에서 유저를 커스텀 해서 사용하려면 아래와같이 유저로 사용할 클래스를 하나 생성해야한다.

클래스를 생성했다면 SecurityConfig 를 생성한다.

여기서 중요한 부분은 두 번째 http 옵션들과 세 번째 http 옵션들이다.
두 번째 http 옵션
// 사용자의 권한에 따라 들어갈 수 있는 페이지의 종류가 바뀜
http.authorizeHttpRequests((auth) -> {
// 아래에 적힌 url 주소는 모든 접속자들이 접근할 수 있음
auth.antMatchers("/", "/n/", "/loginPage/**", "/signUpPage/**").permitAll();
// 아래에 적힌 url 주소는 "USER" 권한을 가진 접속자들만 사용할 수 있음
auth.antMatchers("/myPage/**").hasRole("USER");
});
세 번째 http 옵션
// 인가 또는 인증에 문제시 로그인 화면을 보여줌
http.formLogin()
// 사용할 로그인 페이지(본인이 만든 페이지 접근 url 작성)
.loginPage("/loginPage/")
// 로그인에 실패할 때 보낼 url
.failureUrl("/loginPage/")
// username으로 사용할 변수이름
.usernameParameter("id")
// password로 사용할 변수이름
.passwordParameter("password")
// 로그인을 진행할 url
.loginProcessingUrl("/loginPage/login/")
// 로그인이 성공했을 때 보내질 url
.defaultSuccessUrl("/loginPage/login/loginSuccess/")
// 모든 사용자가 접근할 수 있게 설정
.permitAll();
이후 controller 와 service, repository를 작성해준다.
controller
@Controller
public class MemberController {
@Autowired
SignUpService signUpService;
@Autowired
PasswordEncoder passwordEncoder;
//로그인 페이지 이동
@GetMapping("/loginPage/")
public String loginPage(){
return "member/loginPage";
}
// 로그인 기능
@PostMapping("/loginPage/login/")
public void login(String id){
signUpService.loadUserByUsername(id);
}
// 로그인 완료
@GetMapping("/loginPage/login/loginSuccess/")
public String loginSuccess(){
return "redirect:/";
}
// 로그아웃
// 로그아웃 기능은 SecurityConfig 에서 작성해주었기 때문에 따로 사용을 하지 않음
@GetMapping("/logout/")
public void logout(){
}
// 회원가입 페이지 이동
@GetMapping("/signUpPage/")
public String signUpPage(){
return "member/signUpPage";
}
// 회원가입
@PostMapping("/signUpPage/signUp")
@ResponseBody
public String signUp(Member member){
String res = "no";
res = signUpService.signUp(member, passwordEncoder);
return res;
}
}
service
@Service
@RequiredArgsConstructor
@Builder
public class SignUpService implements UserDetailsService {
private final MemberRepository memberRepository;
// SpringSecurity 를 사용해서 로그인 진행하기
@Override
public UserDetails loadUserByUsername(String username) throws UsernameNotFoundException{
Member member = memberRepository.findById(username);
if(member == null) {
throw new UsernameNotFoundException(username);
}
return User.builder()
.username(member.getId())
.password(member.getPassword())
.roles(member.getRollName())
.build();
}
// 멤버 회원가입 메소드
public String signUp(Member member, PasswordEncoder passwordEncoder){
member.setPassword(passwordEncoder.encode(member.getPassword()));
member.setRollName("USER");
Member signUpMember = memberRepository.save(member);
if(signUpMember == null){
return "no";
}else{
return "yes";
}
}
}
repository
@Repository
public interface MemberRepository extends JpaRepository<Member, Object> {
Member findById(String id);
}
위의 방식대로 사용하면 SpringSecurity 에서 내가 사용할 객체로 변경해서 로그인을 할 수 있다.
'Spring-Boot' 카테고리의 다른 글
| GitHub Actions + Docker + AWS EC2로 CI/CD 파이프라인 직접 구축하기 (0) | 2026.01.09 |
|---|---|
| Spring-Boot JPA 설정 (0) | 2023.03.15 |