[java] 스프링 시큐리티에서의 로그인 캡차 설정

스프링 시큐리티는 웹 애플리케이션의 보안과 인증을 처리하는 데 사용되는 강력한 프레임워크입니다. 로그인 페이지에서 로그인 캡차를 사용하여 로봇으로부터의 공격을 방지할 수 있습니다. 스프링 시큐리티에서는 간단한 설정만으로 로그인 캡차를 적용할 수 있습니다.

Google reCAPTCHA API 키 발급

먼저, Google reCAPTCHA의 API 키를 발급받아야 합니다. Google reCAPTCHA는 사용자가 로봇이 아님을 인증하기 위해 사용되는 무료 서비스입니다. Google reCAPTCHA 사이트에 가입하여 API 키를 발급받으세요.

스프링 시큐리티 의존성 추가

스프링 부트 프로젝트의 pom.xml 파일에 다음 의존성을 추가합니다.

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-security</artifactId>
</dependency>

application.properties 설정

application.properties 파일에 다음 설정을 추가합니다.

spring.security.user.name=admin
spring.security.user.password=admin

spring.security.loginPage=/login
spring.security.defaultSuccessUrl=/home

# Google reCAPTCHA API 키
spring.security.reCaptcha.siteKey=YOUR_SITE_KEY
spring.security.reCaptcha.secretKey=YOUR_SECRET_KEY

위의 코드에서 YOUR_SITE_KEYYOUR_SECRET_KEY를 발급받은 Google reCAPTCHA API 키로 대체하세요.

로그인 페이지 수정

로그인 페이지의 HTML 파일을 수정하여 로그인 폼에 로봇 확인용 캡차를 추가해야 합니다. 캡차는 form 태그 안에 위치해야 합니다.

<form th:action="@{/login}" method="post">
    ...
    <div class="g-recaptcha" data-sitekey="YOUR_SITE_KEY"></div>
    ...
</form>

위의 코드에서 YOUR_SITE_KEY를 발급받은 Google reCAPTCHA API 키로 대체하세요.

컨트롤러 설정

로그인 요청을 처리하는 컨트롤러에서 캡차 검증 로직을 추가해야 합니다.

@Controller
public class LoginController {

    @Autowired
    private ReCaptchaService reCaptchaService;

    @PostMapping("/login")
    public String login(@RequestParam(name = "g-recaptcha-response") String reCaptchaResponse,
                        ...) {
        if (!reCaptchaService.verify(reCaptchaResponse)) {
            // 캡차 검증 실패 처리
        }

        // 로그인 처리 로직
    }
}

위의 코드에서 ReCaptchaService는 캡차 검증을 수행하는 서비스입니다. 이 서비스를 스프링 빈으로 등록하고 의존성을 주입해야 합니다.

캡차 서비스 구현

ReCaptchaService를 구현하여 캡차 검증 로직을 작성해야 합니다. Google reCAPTCHA의 API를 호출하여 응답을 검증하고, 유효한 캡차인지 확인해야 합니다.

@Service
public class ReCaptchaServiceImpl implements ReCaptchaService {

    @Value("${spring.security.reCaptcha.secretKey}")
    private String secretKey;

    @Override
    public boolean verify(String reCaptchaResponse) {
        // Google reCAPTCHA API 호출 및 응답 검증 로직 작성
        
        // 캡차가 유효한 경우 true 반환
        // 캡차가 유효하지 않은 경우 false 반환
    }
}

위의 코드에서 secretKey에는 application.properties 파일에 설정한 Google reCAPTCHA의 시크릿 키가 주입됩니다.

결론

위의 설정을 통해 스프링 시큐리티에서 로그인 캡차를 사용할 수 있습니다. 로봇으로부터의 공격을 방지하고 보안 수준을 높이기 위해 로그인 캡차를 활용해 보세요.


참고 링크: