春-cecurity説明:
春のセキュリティは、エンタープライズアプリケーションのための安全なアクセス制御宣言セキュリティフレームワークSpringベースのソリューションを提供することができます。これは、セット春豆のアプリケーションコンテキストで設定することができ提供フル使用春のIoC、DI(コントロール、DIの制御反転反転:依存性注入依存性注入)とAOP(アスペクト指向プログラミング)機能は、アプリケーションを提供します宣言セキュリティアクセス制御機能、作業のコードの重複をたくさん書いて、企業システムのセキュリティ制御を減らします。
このブログは、機能が含まれています。
1)春・セキュリティ・デフォルト・ログインを使用して、基本的なバネ - セキュリティのデモを実施しています
2)春 - セキュリティとログアウト機能に基づいてログインページのカスタマイズ
3)バネセキュリティデータベースを使用してログイン認証のためのデータを取得します
1.新しいプロジェクトMavenの戦争のパッケージタイプを作成します。
注:新しいMavenプロジェクトがエラーでWebエンジニアリング手法やプロジェクトをのpom.xmlに変換する必要がありますのweb.xmlが欠落していると、<failOnMissingWebXml> IS SETへの真の解決策を参照してください。
https://www.cnblogs.com/sun-flower1314/p/11732915.html
2.春のセキュリティのpom.xml設定達人に追加されます
<プロパティ> <spring.version> 4.2.4.RELEASE </spring.version> </プロパティ> <依存性> <依存> <groupIdを> org.springframework </ groupIdを> <たartifactId>ばねコア</たartifactId> <バージョン> $ {spring.version} </バージョン> </依存関係> <依存> <groupIdを> org.springframework </ groupIdを> <たartifactId>春・ウェブ</たartifactId> <バージョン> $ {spring.version} </バージョン> </依存関係> <依存> <groupIdを> org.springframework </ groupIdを> <たartifactId>春-webmvc </たartifactId> <バージョン> $ {spring.version} </バージョン> </依存関係> <依存> <groupIdを> org.springframework </ groupIdを> <たartifactId>春・コンテキストのサポート</たartifactId> <バージョン> $ {spring.version} </バージョン> </依存関係> <依存> <groupIdを> org.springframework.security </ groupIdを> <たartifactId>春・セキュリティ・ウェブ</たartifactId> <バージョン> 4.1.0.RELEASE </バージョン> </依存関係> <依存> <groupIdを> org.springframework.security </ groupIdを> <たartifactId>春・セキュリティ設定</たartifactId> <バージョン> 4.1.0.RELEASE </バージョン> </依存関係> </依存関係> <ビルド> <プラグイン> <! - Javaコンパイラプラグイン - > <プラグイン> <groupIdを> org.apache.maven.plugins </ groupIdを> <たartifactId>のmaven-コンパイラプラグイン</たartifactId> <バージョン> 3.2 </バージョン> <設定> <ソース> 1.7 </ソース> <対象> 1.7 </ターゲット> <コード> UTF-8 </エンコーディング> </設定> </プラグイン> <プラグイン> <groupIdを> org.apache.tomcat.maven </ groupIdを> <たartifactId> tomcat7-のmaven-pluginの</たartifactId> <設定> <! - ポートを指定します。 - > <ポート> 9080 </ポート> <! - 経路リクエスト - > <パス> / </ path>を </設定> </プラグイン> </プラグイン> </構築>
3. / srcに/メイン/リソースの新しい春-のsecurity.xmlの構成ファイル。
プロファイルは、過去とは若干異なるです注意するポイント:
従来の接頭辞<豆> </豆>は、直接的な方法で、Beanのデフォルト
今<です:豆豆> </豆:豆>、 :手間を省くために、最初にここで使用されるので、セキュリティのデフォルトとして設定されます。<XXXセキュリティ>デフォルトのxmlnsがあるため、基本的に、セキュリティです。
<?xml version = "1.0"エンコード= "UTF-8"?> < 豆:豆のxmlns = "http://www.springframework.org/schema/security" のxmlns:豆 = "のhttp://www.springframework .ORG /スキーマ/豆"の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 http:// www.springframework.org/schema/security http://www.springframework.org/schema/security/spring-security.xsd 「> <HTTPを使用-表現= "false" に> <インターセプト-URLパターン= "/ **" アクセス= "ROLE_USER" /> <フォームのログイン/> </ HTTP> <! - 認証マネージャ - > <認証マネージャ> <認証プロバイダ> <ユーザーサービス> <ユーザー名= "管理者" パスワード= "123456" 当局= "ROLE_USER" /> </ユーザーサービス> </認証プロバイダ> </認証マネージャ> </豆:豆>
春-のsecurity.xmlプロファイルは、説明属性:
<1> <HTTP>タグ:属性を使用-式の設定は、式を使用属性場合、サブラベルがインターセプト-URLアクセス= hasRoleも(「ROLE_USER」)を設定する必要があり、虚偽の表現SPELがそうでなければ有効に有効にするかどうかを示します
<2> <インターセプト-URL>は、インターセプトURLを表し、属性パターンは=「/ *」、唯一のルートディレクトリリソースブロックを示し、サブディレクトリのリソースは、*インターセプト/、すべてのリソースが含まれていませんが、アクセスの構成プロパティの役割名を表し値はROLE_ [始まり]でなければなりません
<3> <ログインフォーム/>は、 開いているフォーム機能を表し
<4> <認証プロバイダ>を示す認証プロバイダ
<5> <ユーザー>現在のシステムのログイン・ユーザー設定するには、タブ:ユーザ名の名前を、パスワードのパスワード、現在のユーザーの役割が当局に属し
4. web.xml構成ファイル、ファイル全体は次のようになります。
これ含むロードクラスパス:春のsecurity.xmlファイルおよび追加安全フィルタを、前記springSecurityFilterChain固定名前を変更することはできません
<?xml version = "1.0" エンコード= "UTF-8"?> <web-appのxmlns:XSI = "http://www.w3.org/2001/XMLSchema-instance" のxmlns = "http://java.sun.com/xml/ns/javaee" のxsi:schemaLocationの = "HTTP ://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd」 バージョン = "2.5"> <コンテキスト-PARAM> <param-name>のcontextConfigLocation </ PARAM名> <PARAM値> クラスパス:春のsecurity.xml </ PARAM値> </コンテキスト-param>の <聞き手> <listener- クラス > org.springframework.web.context.ContextLoaderListener </ listener- クラス > </リスナー> <! - セキュリティ・フィルタ - > <フィルタ> <フィルタ名> springSecurityFilterChain </フィルタ名> <フィルタ- クラス > org.springframework.web.filter.DelegatingFilterProxy </フィルタ- クラス > </フィルタ> <のfilter-mapping> <フィルタ名> springSecurityFilterChain </フィルタ名> <url-pattern> / * </のurl-pattern> </フィルタマッピング> </ web-app>の
インタフェースのいずれかを書いていない場合でも、セキュリティは、デフォルトのログイン画面を見ることができ、アクセスにブラウザのアドレスを入力し、成功したスタート後、実行します。5.次にtomcat7、Mavenのでプロジェクトを開始するには、コマンドを起動します。
6.ユーザー名とパスワードを入力し、間違ったユーザー名とパスワードを入力した場合、あなたは次のインターフェイスを見ることができます:
正しいユーザパスワードを入力した後、それはconfigureがデフォルトのホーム・ページが存在しないので、あなたはWebアプリケーションでindex.htmlページを設定することができ、404エラーが表示されます。
7.ユーザ定義のログインページ
システムのデフォルトのログインページを使用することはできません実際の開発、
1)ログインページを構築
①form所定のフォームアクション=「/ログイン」メソッド=「ポスト」
②<入力>名前所定のユーザ入力=「ユーザ名」;パスワードボックス、所定名=「パスワード」
すなわち、次のように:
< フォームアクション= ' /ログイン ' メソッド=' POST ' > < 表> < TR > < TD >用户名:</ TD > < TD > < 入力タイプ='テキスト' 名= ' ユーザ名 ' の値='' > </ TD > </ TR > < TR > < TD >密码:</ TD > < TD > <入力タイプ= ' パスワード ' 名='パスワード' /> </ TD > </ TR > < TR > < TD COLSPAN = '2' > < 入力名= "提出" タイプ= "提出" 値= "登陆" / > </ TD > </ TR > </ テーブル> </ フォーム>
2)失敗したログインページの構築 login_error.html(内容は省略)
3)再度ばねのsecurity.xml構成ファイルを変更
割り当ては以下の向上:
<1> ログインページは:ログインページを指定します。
<2> 認証失敗-URL:認証ページへのジャンプを失敗指定します。
<3> デフォルト・ターゲット・URL:ユーザに提示成功した認証と認可のデフォルト後のページを指定します。
<4> CSRF無効= "true"を 关闭CSRF
<5> <ヘッダ> <フレーム -options方針= 「SAMEORIGIN」 /> </ヘッダ>を示し、別のページにページに埋め込まれてそこにiframeタグを
<6> <ジンバブエログアウト/>ログアウトすることを示し、およびアクションのために構成ログアウトボタン:/ログアウト
<! - 次のページが傍受されることはありません - >
<HTTPパターン= "/ login.htmlと" セキュリティ= "なし"> </ HTTP>
<HTTPパターン= "/ login_error.html" セキュリティ= "なし"> </ HTTP>
<! - ページのブロックルール - >
<HTTPを使用-表現= "false" に>
<インターセプト-URLパターン= "/ *" アクセス= "ROLE_USER" />
<フォームのログインログイン・ページ= "/ login.htmlと" デフォルト -target-URL = "/ index.htmlを"認証失敗-URL = "/ login_error.html"常時使用デフォルト・ターゲット= "true"を / >
<CSRF無効= "真" />
<! - <ヘッダ>
<フレーム・オプション・ポリシー= "SAMEORIGIN" />
</ヘッダ> - >
<ログアウト/>
</ HTTP>
ここで、セキュリティ=「なし」は、ログイン・ページを設定していない場合は、次のエラーが発生し、2番目のリソースがブロックされていないことを示し
csrf disabled="true" 关闭csrf ,如果不加会出现错误,CSRF(Cross-site request forgery)跨站请求伪造,也被称为“One Click Attack”或者Session Riding,通常缩写为CSRF或者XSRF,是一种对网站的恶意利用。
8、从数据库中匹配用户名和密码,而不用配置文件中的用户名和密码
1)编写验证实现类,即继承Security自带的接口UserDetailsService
LoginCheck.java
package com.hxc.securityDemo; import java.util.ArrayList; import java.util.List; import org.springframework.security.core.GrantedAuthority; import org.springframework.security.core.authority.SimpleGrantedAuthority; import org.springframework.security.core.userdetails.User; import org.springframework.security.core.userdetails.UserDetails; import org.springframework.security.core.userdetails.UserDetailsService; import org.springframework.security.core.userdetails.UsernameNotFoundException; public class LoginCheck implements UserDetailsService { @Override public UserDetails loadUserByUsername(String username) throws UsernameNotFoundException { //1.构建角色列表 List<GrantedAuthority> grantedAuthorities = new ArrayList<GrantedAuthority>(); grantedAuthorities.add(new SimpleGrantedAuthority("ROLE_ADMIN")); String password = "123456"; //2.从数据库中查询数据进行检验 // TbUser tbUser = userService.findOne(username); // if(tbUser == null) { // return null; // } // password = tbUser.getPassword(); //... //new User 为Security包中的类,其中第一个参数为登录界面输入的用户名,第二个为后台参数的密码(即从数据库中查询),第三个为权限角色 return new User(username, password, grantedAuthorities); } }
2)在spring-security.xml配置文件中 将认证管理 修改为如下:
<authentication-manager>
<authentication-provider user-service-ref="userDetailService">
</authentication-provider>
</authentication-manager>
<beans:bean id="userDetailService" class="com.hxc.securityDemo.LoginCheck"></beans:bean>
自定义配置完成