0014SpringBootは、ログイン機能を実装thymeleaf組み合わせ

要件を実装するためのログイン機能の必要性は次のとおりです。

1、ログインユーザー名を確認し、当社ホームページに行けば、ユーザー名とパスワードを入力し、表示されます

2、認証が失敗した場合、ログインページを再入力、およびディスプレイ「ユーザ名・パスワード」

図3は、いないログイン場合は、直接「ログイン、権限を持たないでください」直接コントローラ層のメソッドInvoke、すべての必要性は、ログインページおよびプロンプトに転送することはできませんまた、ホームページやその他の静的リソースにアクセスすることはできませんが、

特定には、以下を達成します。

 

ログインページを定義する1

<!DOCTYPE HTML> 
<HTML LANG = "EN"のxmlnsを:目= "http://www.thymeleaf.org">
<HEAD>
<META HTTP-当量= "Content-Typeの"コンテンツ= "text / htmlの、文字セット= UTF-8 ">
<メタ名="ビューポート」コンテンツ= "幅=デバイス幅、初期スケール= 1、収縮にフィット= NO">
<メタ名= "説明"コンテンツ= "">
<メタ名= "著者"コンテンツ= "">
<タイトル>ブートストラップのためのサインインもテンプレート</ TITLE>
<! - @ {}的形式是链接资源文件或者访问某个请求路径- >
<リンクのhref = "は、アサート/css/bootstrap.min.css」番目:HREF = "@ {/ webjars /ストラップ/ 4.0.0 / CSS / bootstrap.css}" REL = "スタイルシート">
<リンクのhref = "アサート/ CSS / signin.css"番目:HREF = "@ {/アサート/ CSS / signin.css}" REL = "スタイルシート">
</ HEAD>

<BODYクラス= "テキスト中心">
< -此处要写成方法= "POST"、不能写成目:!方法= "POST" - >
<フォームクラス= "フォームサインイン"アクション= "dashboard.html"目:アクション= "@ {/ユーザ/ログイン}」方法は= "POST">
<IMGクラス= "MB-4" SRC = "アサート/ IMG /ブートストラップsolid.svg" ALT = ""幅= "72"高さ= "72">
<! - #{}的形式是从国际化配置文件中取值- >
<H1 CLASS = "H3 MB-3フォント重量正常"番目:テキスト= "#{login.tip}">にログインしてください</ H1>
<スパンのスタイル= "色:赤"番目:テキスト= "$ {MSG}"> </ span>を
<ラベルクラス= "SR-のみ"番目:テキスト= "#{login.username}">ユーザー名</ label>は
<! -要写上の名前= "ユーザ名"、
さもなければLoginControllerアクセス方法が与えられていないパス名- > の<input type =「text」の名=「ユーザ名」クラス=「フォームコントロール」プレースホルダ=「ユーザ名」TH:プレースホルダ=「#{} login.username」必要= ""オートフォーカス= "" >
<ラベルクラス= "SRのみ"番目:テキスト= "#{login.password}">パスワード</ラベル>
の<input type = "パスワード" NAME = "パスワード"クラス= "フォームコントロール"プレースホルダ= "パスワード"目:プレースホルダ=" #{login.password}」必要= "">
<DIV CLASS = "チェックボックスMB-3">
<ラベルは>
の<input type = "チェックボックス"値= "覚えミー"> [[# {login.remember}]]
</ label>は
</ div>
<ボタンクラス= "BTN BTN-LG BTNプライマリBTNブロック"タイプ=番目の"送信":テキスト= "#{login.btn}">サイン</ button>の中に
<Pクラス= "MT-5メガバイト-3テキスト・ミュート">©2017年から2018年</ P>
!HREF = "@ {/ - <TH書き換えられるべき指数(L = 'がzh_CNを')}"、 および第書き込むことができない。HREF = "@ {/ 、login.htmlと(L = 'がzh_CNを')}"
ためそうするために、静的なリソースに直接位置は、エリアパーサの独自の定義を行くつもりされていません
> -テンプレートエンジンthymeleafまた、括弧内にで渡されたキーと値のパラメータの形で置かれている
<a class="btn btn-sm" th:href="@{/index(l='zh_CN')}">中国</a>の
<a class="btn btn-sm" th:href="@{/index(l='en_US')}">辞書英語</a>の
</ FORM>

</ BODY>

</ HTML>

ログオン要求コントローラを定義します。2.

パッケージcom.myself.controller。

輸入org.springframework.stereotype.Controller;
輸入org.springframework.util.StringUtils。
輸入org.springframework.web.bind.annotation *。;

輸入javax.servlet.http.HttpSession。
輸入java.util.Map;

@Controller
パブリッククラスLoginConcroller {

// @RequestMapping
// @GetMapping
// @DeleteMapping
// @RequestMapping
@PostMapping(値= "/ユーザ/ログイン")
パブリック文字列ログイン(@RequestParam( "ユーザ名")は、文字列名、@RequestParam ( "パスワード")文字列のパスワード、地図<文字列、オブジェクト>マップ、HttpSessionのセッション){
場合(!StringUtils.isEmpty(ユーザー名)&& "123456" .equals(パスワード)){
//ログイン成功、セッションで成功した家庭での表示のためのログインユーザ名に追加さ
にsession.setAttribute(「loginUser」、ユーザ名);
//ここにリダイレクトして、見て、私たちはビューリゾルバを定義解析されます対応dashboard.htmlの
リターン「リダイレクト:/main.html」;
}他{
//ログインに失敗しました、障害情報と設定は、ログインページに戻り
map.put(「MSG」、「ユーザ名パスワードエラー」);
//あるので、ここで代わりにリダイレクトの、login.htmlをテンプレートに直接文字列を見ているのと同等に応じて
//戻り、それ以外の場合は新聞のページを見つけることができません、「/」または「/index.htmlが」のように記述することはできません
リターン「ログイン」;
}
}

}

3、ホームページを入力した後に成功したログインの定義

展示登录用户名
<a class="navbar-brand col-sm-3 col-md-2 mr-0" href="http://getbootstrap.com/docs/4.0/examples/dashboard/#"> [[ $ {session.loginUser}]] </a>の

4、その後、ログインページに転送され、ログインしていない場合、ユーザーは、ログインしているかどうかを判断するためにいくつかの機能のために呼び出す前に傍受を定義します

パッケージcom.myself.component。

輸入org.springframework.web.servlet.HandlerInterceptor;

インポートのjavax.servlet.http.HttpServletRequest;
インポートのjavax.servlet.http.HttpServletResponse;

パブリッククラスLoginHandlerInterceptor実装HandlerInterceptor {
@Override
preHandleブールパブリック(HttpServletRequestのリクエスト、HttpServletResponseの応答、オブジェクト・ハンドラ)が例外{スロー
。オブジェクトOBJ =でrequest.getSession()のgetAttribute( "loginUserを");
もし(OBJ == NULL){
//没有登录、设置错误信息并转发到登录页面
request.setAttribute( "MSG"、 "没有权限请先登陆")。
request.getRequestDispatcher( "/ index.htmlを")(要求、応答)を転送します。

} {他に
//ログインし、リリース
をtrueに復帰;
}
}
}

構成要素は、これを達成するために必要な前記構成クラス定義に5は、@Bean WebMvcConfigurerAdapter部品の形で添加されます

addInterceptors(InterceptorRegistryレジストリ)法、我々がインターセプトない要求を行い、要求を、インターセプトするインターセプタを定義するここで指定
パッケージcom.myself.config。

輸入com.myself.component.LoginHandlerInterceptor。
輸入com.myself.component.MyLocaleResolver;
輸入org.springframework.context.annotation.Bean;
輸入org.springframework.context.annotation.Configuration。
輸入org.springframework.web.servlet.LocaleResolver;
輸入org.springframework.web.servlet.config.annotation.InterceptorRegistry;
輸入org.springframework.web.servlet.config.annotation.ViewControllerRegistry;
輸入org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
輸入org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter;

@Configuration
publicクラスMyMvcConfigはWebMvcConfigurerAdapter {拡張
// @Overrideを
//ます。public void addViewControllers(ViewControllerRegistryレジストリ){
// registry.addViewController( "/インデックス")setViewName( "ログイン")。
//}
//
// //注册拦截器
// @Override
//ます。public void addInterceptors(InterceptorRegistryレジストリ){
//
// registry.addInterceptor(新LoginHandlerInterceptor())。addPathPatterns( "/ **")
// .excludePathPatterns( "/ index.htmlを"、 "/"、 "/ユーザー/ログイン"、 "/ webjars / **"、 "/ ** / * CSS。"、 "/**/*.js");






webMvcConfigurerAdapter(){
WebMvcConfigurerAdapter webMvcConfigurerAdapter新しい新しいWebMvcConfigurerAdapter =(){
//ヌルがアクセスする場所をパスを定義するために使用されるビューを、あるときにビューに
@Override
公共ボイドaddViewControllers(ViewControllerRegistryレジストリ){
//アクセスのhttp:// localhostを:8080 /とにhttp:// localhost:8080 / index.htmlを見つけるテンプレート/ login.htmlと静的リソースの下
registry.addViewController( "/")setViewName( "ログイン");.
registry.addViewController( "/ index.htmlを" ).setViewName( "ログイン");
//アクセス"/main.html"静的テンプレートリソース/ login.htmlと見ていきます
。registry.addViewController( "/ main.htmlを")setViewName( "ダッシュボード");
}
アクセスリソースにログインするユーザーのニーズを遮断する//登録インターセプターは
@Override
ます。public void addInterceptors(InterceptorRegistryレジストリ){
registry.addInterceptor(新新LoginHandlerInterceptor())。AddPathPatterns( "/ **")
.excludePathPatterns(「/インデックス。.htmlを"" / "" /ユーザー/ログイン"" / webjars / ** "" / ** / * CSS "" /**/*.js「);
}
};
戻りwebMvcConfigurerAdapter。
}

//エリアパーサを定義する国際的な英語のスイッチを解析し
@Bean
LocaleResolver(){ことを公共LocaleResolver
)(新しい新しいMyLocaleResolverを返す;
}

}

テスト:
1、コントローラへのアクセス方法は、ログインページに転送されます

 

 

2、アクセスCSS静的リソースファイルをアクセスすることができます

 

 3、家庭への未知の直接アクセスは、ログインページに転送されます

 

4、ユーザー名とパスワードの入力ミスやエラーメッセージが表示されてログインページに転送されます 

 

 5、正しいユーザー名とパスワードを入力し、私たちのホームページに行き、ログインユーザー名を変更

 

 

 場所を理解していない場合は、展覧会を願っています!

 

 

 

 

 

 

 

 

おすすめ

転載: www.cnblogs.com/xiao1572662/p/11913974.html