# Kaptcha(驗證碼相關)
###### tags: `Java Web-常用知識點`
1. 為什麽需要驗證碼
- 透過驗證的方式,避免被人惡意攻擊
- 為了防止被破解,驗證碼型式也在不斷進化
3. kaptcha如何使用:
- 添加jar

- 在web.xml文件中注冊KaptchaServlet,並設置驗證碼圖片的相關屬性
```xml=
<servlet>
<servlet-name>KaptchaServlet</servlet-name>
<servlet-class>com.google.code.kaptcha.servlet.KaptchaServlet</servlet-class>
<init-param>
<param-name>kaptcha.border.color</param-name>
<param-value>red</param-value>
</init-param>
<init-param>
<param-name>kaptcha.textproducer.char.string</param-name>
<param-value>abcdefg</param-value>
</init-param>
<init-param>
<!--去除干擾線-->
<param-name>kaptcha.noise.impl</param-name>
<param-value>com.google.code.kaptcha.impl.NoNoise</param-value>
</init-param>
</servlet>
<servlet-mapping>
<servlet-name>KaptchaServlet</servlet-name>
<url-pattern>/kaptch.jpg</url-pattern>
</servlet-mapping>
```
- 在html頁面上編寫一個img標簽,然後設置src等於KaptchaServlet對應的url-pattern
```htmlembedded=
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<img src="kaptch.jpg"/>
</body>
</html>
```
成果:

3. kaptcha驗證碼圖片的各個屬性在常量接口:Constants中

4. KaptchaServlet在生成驗證碼圖片時,會同時將驗證碼信息保存到session中
因此,我們在注冊請求時,首先將用戶文本框中輸入的驗證碼值和session中保存的值進行比較,相等,則進行注冊
```java=
@WebServlet("/kaptcha01")
public class KaptchaServletDemo01 extends HttpServlet {
@Override
protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
HttpSession session = request.getSession() ;
Object obj = session.getAttribute("KAPTCHA_SESSION_KEY");
System.out.println("obj = " + obj);
}
}
```