序文:
Kaptchaの導入とSpring Kaptchaの統合に関して、私は別の記事で詳細に説明しました。参照してください:Spring Kaptcha検証コード。
この記事では、スプリングブートをKaptchaに統合する2つの方法を紹介します。
開発ツールとテクノロジー:
1。アイデア2017
2。スプリングブート2.0.2
3。カプチャ
正式に開始:
方法1:kaptcha.xmlを介して構成
1.アイデアを使用して新しいスプリングIniveryizrを作成します
2。Kaptchaの依存関係を追加します:
<! - kaptcha検証コード - > <依存関係> <groupid> com.github.penggle </groupid> <artifactid> kaptcha </artifactid> <バージョン> <バージョン> </version> </dependency>
3.次のコンテンツを使用して、リソースの下に新しいkaptcha.xmlを作成します。
kaptcha.xml
<?xml version = "1.0" encoding = "utf-8"?> <beans xmlns = "http://www.springframework.org/schema/beans" xmlns:xsi = "http://www.w3.org/2001/xmlschema-instance" xsi:schemalocation = "http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd"> <! - 生成kaptcha- <constructor-arg type = "java.util.properties"> <! - set kaptchaプロパティ - > <props> <prop key = "kaptcha.border"> yes </prop> <prop key = "kaptcha.border.color"> 105,179,90 </prop = <prop = "kaptcha.textprod.fontcer. <key = "kaptcha.image.width"> 100 </prop> <prop key = "kaptcha.image.height"> 50 </prop> <prop key = "kaptcha.image.height"> 50 </prop> <prop key = "kaptcha.image.height"> 50 </prop> <prop> <prop> <prop> prop> <prop> <> <> prop> prop> prop> prop> prop> prop> prop> prop> prop> prop> key = "kaptcha.image.height"> 50 </prop> <prop key = "kaptcha。key=" kaptcha.textproducer.font.size "> 27 </prop> <prop key =" kaptcha.session.key "> code </prop> <prop key =" kaptcha.textproducer.luget key = "kaptcha.textproducer.font.names"> song font、kai font、microsoft yahei </prop> <prop key = "kaptcha.textproducer.char.string"> 01234567889ABCEFGHIJKLMNOPQRSTUVWXYZ </prop> prop key = "kaptcha.obscurificator.impl"> com.google.code.kaptcha.impl.waterripple </prop> <prop key = "kaptcha.noise.color"> black> <prop key = "kaptcha.noise.imp key = "kaptcha.background.clear.from"> 185,56,213 </prop> <prop key = "kaptcha.background.clear.to"> white </prop> <prop key = "kaptcha.textproducer.char.space"> 3 </prop> </props
注:kaptcha.xmlのコンテンツは、実際にはspring-kaptcha.xmlのコンテンツと同じです。それは、カプチャをスプリングコンテナ管理に渡し、いくつかのプロパティを設定し、必要に応じて直接注入することを意味します。
4。Kaptcha.xmlをロード:
@ImportResource(locations = {"classpath:kaptcha/kaptcha.xml"}),このアノテーションを追加すると、SpringbootはKaptcha.xmlファイルをロードします。 kaptcha.xmlのパスを誤って記述すべきではないことに注意してください。クラスパスはこちらのリソースディレクトリです。
5。検証コードを生成するためにコントローラーを作成します。
codecontroller.java
@controllerpublic class codecontroller {@autowired private producer captchaproducer = null; @RequestMapping( "/kaptcha")public void getkaptchaimage(httpservletrequest request、httpservletresponse応答)スロー{httpsession session = request.getsession(); Response.setDateHeader( "Expires"、0); Response.setheader( "Cache-Control"、 "No-Store、No-Cache、必須再評価"); Response.Addheader( "Cache-Control"、 "Post-Check = 0、Pre-Check = 0"); Response.setheader( "Pragma"、 "no-cache"); Response.setContentType( "Image/jpeg"); //検証コード文字列captext = captchaproducer.createText()を生成します。 session.setattribute(constants.kaptcha_session_key、captext); //クライアントにbufferedImageを書き込むbi = captchaproducer.createimage(captext); servletoutputStream out = respons.getOutputStream(); Imageio.write(bi、 "jpg"、out); try {out.flush(); }最後に{out.close(); }}}注:このコントローラーパスでkaptcha.xmlで構成されているBeanを注入すると、検証コードを生成し、検証コードをクライアントに出力できます。このクラスのルートを覚えておいてください。フロントエンドページの検証コードのSRCは、このルートを指す必要があります。
6.新しい検証コード比較ツールを作成します。
codutil.java
パブリッククラスのcodeutil { / ** *取得したフロントエンドパラメーターを文字列タイプに変換 * @param request * @param key * @return * / public static string getString(httpservletrequest request、string key){try {string result = request.getParameter(key); if(result!= null){result = result.trim(); } if( ""。equals(result)){result = null; } return result; } catch(例外E){nullを返します。 }} /** *検証コード検証 * @param request * @return * /public static boolean checkverifycode(httpservletrequest request){//生成された検証コード文字列verifycodeexpected =(string)request.getSession()。 //ユーザー文字列によって入力された検証コードを取得verifyCodeActual = codeutil.getString(request、 "verifyCodeActual"); if(verifyCodeActual == null ||!verifyCodeActual.equals(verifyCodeexpected)){return false; } trueを返します。 }}注:このクラスは、生成された検証コードをユーザーが入力した検証コードを比較するために使用されます。生成された検証コードはセッションに自動的に追加され、ユーザー入力はgetParameterを介して取得されます。 getParameterの重要な値は、ページ内の検証コードの名前値と一致する必要があることに注意してください。
7。検証コードを使用します:
Controller
helloworld.java
@RestControllerPublic Class HelloWorld {@RequestMapping( "/hello")public string hello(httpservletrequest request){if(!codeutil.checkverifycode(request)){return "return"検証コードは正しくありません! "; } else {return "hello、world"; }}} page
hello.html
<!doctype html> <html lang = "en"> <head> <meta charset = "utf-8"> <title> title> </title> <script type = "text/javascript"> function refresh(){document.getelementbyid( 'captcha_img')。src = "/kaptcha?"+math(); } </script> </head> <body> <form action = "/hello" method = "post">検証コード:<入力タイプ= "テキスト" placeholder = "" name "name" name = "verifycodeacual"> <div> <img id = "captcha_img" onclick = "submat =" "/kaptcha"/div " /> </form> </body> </html>注:検証コードは基本的に画像なので、<img>タグを使用してから、src = "/kaptcha"を使用して、検証コードを生成するコントローラーのルートを指します。 onclick = "reffery()"を介してJSコードを呼び出して、クリックツースイッチ関数を実現します。 <input name = "verifyCodeacual">の名前の値に注意してください。CodutilのgetParameter()リクエスト方法を介してユーザーが入力した検証コードを取得するときに渡されたキー値は、ここでの名前値と一致するはずです。
8。テスト:
正しい検証コードを入力します
検証が合格しました
間違った検証コードを入力します
検証に失敗しました
方法2:Configurationクラスを介してKaptchaを構成します
1. Kaptchaを構成します
方法1と比較して、1つが増加し、2つの減少があります。
減らす:
@ImportResource(locations = {"classpath:kaptcha/kaptcha.xml"})
増加:
compled新しいKaptchaconfig構成クラスを作成します。コンテンツは次のとおりです。
kaptchaconfig.java
@configurationPublic class kaptchaconfig {@bean public defaultkaptcha getDefaultKaptcha(){defaultKaptcha captChaproducer = new DefaultKaptcha();プロパティプロパティ= new Properties(); properties.setProperty( "kaptcha.border"、 "yes"); properties.setProperty( "kaptcha.border.color"、 "105,179,90"); properties.setProperty( "kaptcha.textproducer.font.color"、 "blue"); properties.setProperty( "kaptcha.image.width"、 "110"); properties.setProperty( "kaptcha.image.height"、 "40"); properties.setProperty( "kaptcha.textproducer.font.size"、 "30"); properties.setProperty( "kaptcha.session.key"、 "code"); properties.setProperty( "kaptcha.textproducer.char.length"、 "4"); properties.setProperty( "Kaptcha.textProducer.font.Names"、 "Song Font、Kai Font、Microsoft Yahei"); config config = new config(Properties); captchaproducer.setconfig(config); CaptChaproducerを返します。 }}注:このクラスは、方法1のkaptcha.xmlに相当するKaptchaの構成に使用されます。KaptchaをIOCコンテナに追加してから、設定されたプロパティを使用してインスタンスに戻り、最後にCodeControllerに注入します。それを使用して、CodeControllerで検証コードを生成できます。 Return CaptChaproducerに特に注意してください。プライベートプロデューサーのcaptchaproducerの名前Captchaproducer = null;、それ以外の場合は、豆はロードされません。
2。テスト:
正しい検証コードを入力してください:
検証が合格しました
間違った検証コードを入力します
検証に失敗しました
2回の検証コードが2つの方法に基づいて生成されることを説明するために、最初と2番目の方法の検証コードは異なる属性を設定します。写真から、2回の検証コードの色、干渉線、背景などが異なることがわかります。
要約:
1。プロセスソート:
どちらの方法に関係なく、まずカプチャをスプリングコンテナに追加する必要があります。つまり、カプタチャビーンが必要です。次に、新しいコントローラーを作成し、Kaptcha Beanをコントローラーに注入して検証コードを生成します。次に、検証コードを比較するツールクラスがあり、検証コードの比較のためにテストコントローラーのツールクラスを呼び出します。最後に、フロントエンドページでは、検証コードを取得するには<img src = "/生成验证码的controller的路由">を使用する必要があります。このIMGタグにクリックイベントを追加することにより、「検証コードを切り替えるためにクリック」を実現できます。
2。SpringIntegration Kaptchaとの比較
Spring Integration Kaptchaでは、2つの方法も紹介します。構成はWeb.xmlで最も単純であり、検証コードを生成するコントローラーを記述する必要はありません。ページでは、srcを使用して、web.xmlのkaptchaのサーブレットの<url-pattern>値を指します。
Kaptchaを統合するスプリングブートの両方の方法は、Kaptchaを統合する春の2番目の方法に似ています。最初に豆を構成するために使用され、次にコントローラーを使用して検証コードを生成します。フロントエンドはSRCを使用してこのコントローラーを指します。違いは、検証コードを生成するコントローラーが /xxxである場合、カプチャを統合するスプリングブートの場合はsrc = "xxx.jpg"、 src = "/xxx"。
上記はこの記事のすべての内容です。みんなの学習に役立つことを願っています。誰もがwulin.comをもっとサポートすることを願っています。