Spring Boot를 사용하여 XML없이 kaptcha 사용
15201 단어 Groovyspring-boot
개요
Spring Boot 에서 또는 pt 차 사용
build.gradle
포인트는, kaptcha가 Maven 리포지토리에 없기 때문에, jar를 lib 이하에 넣어 의존관계에 추가하고 있는 곳. lib 이하의 모든 jar를 대상으로 하고 있는 것은 손잡이.
(省略)
dependencies {
compile fileTree(dir: 'lib', include: '*.jar')
}
(省略)
Bean 정의 클래스 만들기
kaptcha의 예라면 web.xml에서 servlet에 kaptcha.jpg를 매핑하는 것을 @Configuration에서 지정한 클래스로 설정한다.
@Configuration
public class AppConfig {
@Bean
public ServletRegistrationBean kaptcha() {
new ServletRegistrationBean(new KaptchaServlet(), "/kaptcha.jpg")
}
}
입력 데이터 클래스 만들기
화면에서 받는 것은 kaptcha 문자열만.
또한 Groovy이므로 setter/getter도 불필요. 다만, 속성을 def 로 선언해 버리면(자), Object형이 되어 실행시에 에러가 되어 버린다.
public class KaptchaFormData {
@NotNull
@Size(min = 5, message = "入力した文字が短すぎます")
String kaptcha
}
kaptcha 해결 서비스 클래스 만들기
그렇다고해도, 문자열끼리를 대문자/소문자 관계없이 비교할 뿐.
@Service
public class SolveKaptchaService {
public boolean solve(String expected, String actual) {
actual.equalsIgnoreCase(expected)
}
}
Controller 클래스 만들기
kaptchaAction 메소드로 요청을 받는다. 입력값이 짧거나 입력되지 않은 것은 데이터 클래스에 지정한 어노테이션대로 체크.
kaptchaAction 메소드는, HttpSession 오브젝트도 받게 되어 있어, 세션으로부터 kaptcha의 정답 캐릭터 라인을 취득해 온다.
그리고는, 입력 캐릭터 라인과 정답 캐릭터 라인을 Service 클래스에 건네주어 완료.
@Controller
public class KaptchaController {
@Autowired
SolveKaptchaService solveKaptcha
@ModelAttribute("kaptchaFormData")
KaptchaFormData setUp() {
new KaptchaFormData()
}
@RequestMapping(value = "/", method = RequestMethod.GET)
public String kaptcha() {
"index"
}
@RequestMapping(value = "/", method = RequestMethod.POST)
public String kaptchaAction(@Validated KaptchaFormData kaptchaFormData, BindingResult bindingResult,
Model model, HttpSession session) {
if (bindingResult.hasErrors()) {
return "index"
}
def expectedKaptcha = (String)session.getAttribute(Constants.KAPTCHA_SESSION_KEY)
if (!solveKaptcha.solve(expectedKaptcha, kaptchaFormData.kaptcha)) {
model.addAttribute("exception", new Exception("入力した文字が画像と違います。"))
return "index"
}
"success"
}
}
화면
화면은 Thymeleaf를 사용하여 템플릿화하고 있다.
포인트가 되는 것은, kaptcha를 클릭할 때마다 화상이 변경되도록(듯이) 하고 있는 곳. Thymeleaf의 th:inline"javascript"를 사용하고 있는 곳.
<!DOCTYPE html>
<html xmlns:th="http:///www.thymeleaf.org">
<head>
<meta charset="UTF-8" />
<title>kaptcha Login</title>
<script th:src="@{/jquery-1.11.1.min.js}" />
</head>
<body>
<h1>ログイン</h1>
<form name="kForm" method="post" th:action="@{/}" th:object="${kaptchaFormData}">
<div>
<span th:if="${#fields.hasErrors('kaptcha')}" th:errors="*{kaptcha}" style="color: red;">error!</span>
<span th:if="${exception != null}" th:text="${exception.message}" style="color: red;">error!</span>
</div>
<div><img th:src="@{/kaptcha.jpg}" width="200" id="kaptchaImage" /></div>
<script th:inline="javascript">
var kaptchaUrl = /*[[@{/kaptcha.jpg}]]*/ "/kaptcha.jpg";
$(function(){
$('#kaptchaImage').on('click', function() {
$(this).attr('src', kaptchaUrl + '?' + Math.floor(Math.random()*100) );
})
});
</script>
<div>
<input type="text" name="kaptcha" value="" th:field="*{kaptcha}" />
</div>
<div>
<button id="loginButton" onCLick="document.kForm.submit();">ログイン</button>
</div>
</form>
</body>
</html>
완성된 화면
이런 식으로 이미지가 표시됩니다.
참조
지금까지의 모든 소스 코드는 다음 리포지토리에 있습니다.
* SpringBootCaptcha
Reference
이 문제에 관하여(Spring Boot를 사용하여 XML없이 kaptcha 사용), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/mas0061/items/a2aa48f2c0bd01ad0801텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)