Spring securityステップデータベース内のアカウントとパスワード認証を使用
16699 ワード
目次 spring securityデータベース内のアカウントとパスワード認証を使用 一、原理分析 二、コード実現 1.javaWebエンジニアリング を新規作成.ユーザ認証の実現 .3.テスト 三、総括
Spring securityデータベース内のアカウントとパスワード認証を使用
サンプルエンジニアリングアドレス
一、原理分析
フロントのログイン要求がバックエンドに送信されるとspring securityによってブロックされます.すなわち、controllerレイヤはフレームワーク自体によって提供されます.これにより、ユーザー名とパスワードの認証はサービス層で完了する必要があるため、フレームワークはサービス層で独自のデータベースアカウント情報を取得する必要があります.
Spring securityは、ユーザーにアカウントとパスワードを提供するインタフェースUserDetailsServiceを提供しています.その内容は次のとおりです.
ユーザーはこのインタフェースのloadUserByUsernameメソッドを実装し、データベースでクエリーされたアカウントとパスワードを通じてUserDetailsオブジェクトを構築してspring securityに返し、フレームワークは自分で認証操作を完了します.
UserDetailsもインタフェースで、spring securityは現在認証されているユーザー情報をカプセル化します.
Spring securityは、Userのコードの一部を直接使用できる実装クラスを提供しています.
したがって、データベースを使用して認証を完了する鍵は、UserDetailsServiceインタフェースを実装し、loadUserByUsernameメソッドでフレームワークに必要なUserDetailsオブジェクトをカプセル化することです.すなわち、Userオブジェクトはフレームワークに戻り、フレームワークによって後続の認証操作を完了します.
認証に使用するuserServiceのbeanをspring securityのプロファイルに指定する必要があります.
二、コード実装
1.javaWebプロジェクトの新規作成
Javawebプロジェクトを新規作成し、関連依存をインポートします.pomファイルの内容は次のとおりです.
pomファイル
Web.xmlでspring securityのフィルタを構成する
web.xml
springとmybatis,springのプロファイルアプリケーションContext.xmlの統合
スプリングプロファイル
Spring securityプロファイル
Spring securityのプロファイルの内容、spring-security.xml
このプロファイルでは、認証用のuserService Beanを構成することに注意してください.
ログインページの作成とログインに失敗したページlogin.html,failed.html
2.ユーザ認証の実現
新しいIUserServiceインタフェースUserDetailsServiceの継承
実装クラスは次のとおりです.
ここでloadUserByUsernameメソッドではデータベース情報のクエリーが完了し、フレームワークに必要なユーザー情報にカプセル化されます.
注意:
UserInfoは、データベース・ユーザー情報をカプセル化するエンティティ・クラスです.
getRolesはユーザーにロール情報を付与するために使用され、spring security認証時にユーザーはロール情報を持っていなければならない.ロール情報はデータベースから問合せられ、ここで直接エージェントに固定値を書いて示すことができる.
ユーザパスワードに接続された「{noop}」文字列は、パスワードを暗号化していないため、フレームワークにパスワードを認証する際に暗号化する必要がないことを伝えます.
3.テスト
プロジェクトを開始し、localhostにアクセスすると、ログインページにジャンプし、データベースに存在するアカウントとパスワードを入力するとログインに成功し、トップページindex.htmlにジャンプします.
三、まとめ
データベースを使用して認証を完了する鍵は、UserDetailsServiceインタフェースを実装し、loadUserByUsernameメソッドでフレームワークに必要なUserDetailsオブジェクトをカプセル化することです.すなわち、Userオブジェクトはフレームワークに戻り、フレームワークによって後続の認証操作を完了します.
認証に使用するuserServiceのbeanをspring securityのプロファイルに指定する必要があります.すなわち、loadUserByUsernameメソッドを実装したuserServiceです.
サンプルエンジニアリングの具体的なコードを表示する必要がある場合は、下のリンクをクリックしてコードクラウドにサンプルエンジニアリングアドレスを表示します.
Spring securityデータベース内のアカウントとパスワード認証を使用
サンプルエンジニアリングアドレス
一、原理分析
フロントのログイン要求がバックエンドに送信されるとspring securityによってブロックされます.すなわち、controllerレイヤはフレームワーク自体によって提供されます.これにより、ユーザー名とパスワードの認証はサービス層で完了する必要があるため、フレームワークはサービス層で独自のデータベースアカウント情報を取得する必要があります.
Spring securityは、ユーザーにアカウントとパスワードを提供するインタフェースUserDetailsServiceを提供しています.その内容は次のとおりです.
public interface UserDetailsService {
UserDetails loadUserByUsername(String username) throws UsernameNotFoundException;
}
ユーザーはこのインタフェースのloadUserByUsernameメソッドを実装し、データベースでクエリーされたアカウントとパスワードを通じてUserDetailsオブジェクトを構築してspring securityに返し、フレームワークは自分で認証操作を完了します.
UserDetailsもインタフェースで、spring securityは現在認証されているユーザー情報をカプセル化します.
public interface UserDetails extends Serializable {
Collection extends GrantedAuthority> getAuthorities();
String getPassword();
String getUsername();
boolean isAccountNonExpired();
boolean isAccountNonLocked();
boolean isCredentialsNonExpired();
boolean isEnabled();
}
Spring securityは、Userのコードの一部を直接使用できる実装クラスを提供しています.
public class User implements UserDetails, CredentialsContainer {
private String password;
private final String username;
private final Set authorities;
private final boolean accountNonExpired; //
private final boolean accountNonLocked; //
private final boolean credentialsNonExpired; //
private final boolean enabled; //
}
したがって、データベースを使用して認証を完了する鍵は、UserDetailsServiceインタフェースを実装し、loadUserByUsernameメソッドでフレームワークに必要なUserDetailsオブジェクトをカプセル化することです.すなわち、Userオブジェクトはフレームワークに戻り、フレームワークによって後続の認証操作を完了します.
認証に使用するuserServiceのbeanをspring securityのプロファイルに指定する必要があります.
二、コード実装
1.javaWebプロジェクトの新規作成
Javawebプロジェクトを新規作成し、関連依存をインポートします.pomファイルの内容は次のとおりです.
pomファイル
4.0.0
com.lyy
spring_security_1
1.0-SNAPSHOT
war
spring_security_1 Maven Webapp
http://www.example.com
UTF-8
5.0.2.RELEASE
1.6.6
1.2.12
5.1.6
3.4.5
5.0.1.RELEASE
org.aspectj
aspectjweaver
1.6.8
org.springframework
spring-aop
${spring.version}
org.springframework
spring-context
${spring.version}
org.springframework
spring-context-support
${spring.version}
org.springframework
spring-web
${spring.version}
org.springframework
spring-orm
${spring.version}
org.springframework
spring-beans
${spring.version}
org.springframework
spring-core
${spring.version}
org.springframework
spring-test
${spring.version}
org.springframework
spring-webmvc
${spring.version}
org.springframework
spring-tx
${spring.version}
junit
junit
4.12
test
javax.servlet
javax.servlet-api
3.1.0
provided
javax.servlet.jsp
jsp-api
2.0
provided
jstl
jstl
1.2
log4j
log4j
${log4j.version}
org.slf4j
slf4j-api
${slf4j.version}
org.slf4j
slf4j-log4j12
${slf4j.version}
mysql
mysql-connector-java
${mysql.version}
org.mybatis
mybatis
${mybatis.version}
org.mybatis
mybatis-spring
1.3.0
c3p0
c3p0
0.9.1.2
jar
compile
com.github.pagehelper
pagehelper
5.1.2
org.springframework.security
spring-security-web
${spring.security.version}
org.springframework.security
spring-security-config
${spring.security.version}
org.springframework.security
spring-security-core
${spring.security.version}
org.springframework.security
spring-security-taglibs
${spring.security.version}
javax.annotation
jsr250-api
1.0
com.fasterxml.jackson.core
jackson-databind
2.9.7
com.fasterxml.jackson.core
jackson-core
2.9.7
org.projectlombok
lombok
1.16.16
org.apache.tomcat.maven
tomcat7-maven-plugin
2.1
80
/
UTF-8
tomcat7
Web.xmlでspring securityのフィルタを構成する
web.xml
spring security 01
contextConfigLocation
classpath:spring-security.xml,classpath*:applicationContext.xml
org.springframework.web.context.ContextLoaderListener
springSecurityFilterChain
org.springframework.web.filter.DelegatingFilterProxy
springSecurityFilterChain
/*
characterEncodingFilter
org.springframework.web.filter.CharacterEncodingFilter
encoding
UTF-8
characterEncodingFilter
/*
index.html
index.htm
index.jsp
default.html
default.htm
default.jsp
springとmybatis,springのプロファイルアプリケーションContext.xmlの統合
スプリングプロファイル
Spring securityプロファイル
Spring securityのプロファイルの内容、spring-security.xml
このプロファイルでは、認証用のuserService Beanを構成することに注意してください.
ログインページの作成とログインに失敗したページlogin.html,failed.html
2.ユーザ認証の実現
新しいIUserServiceインタフェースUserDetailsServiceの継承
package com.lyy.service;
import org.springframework.security.core.userdetails.UserDetailsService;
public interface IUserService extends UserDetailsService {
}
実装クラスは次のとおりです.
@Service("userService")
public class UserServiceImpl implements IUserService {
@Autowired
private IUserDao userDao;
public UserDetails loadUserByUsername(String username) throws UsernameNotFoundException {
UserInfo userInfo = userDao.findByUsername(username);
User user=new User(userInfo.getUsername(),"{noop}"+userInfo.getPassword(),getRoles());
return user;
}
/* */
private List getRoles(){
List list=new ArrayList();
list.add(new SimpleGrantedAuthority("ROLE_USER"));
list.add(new SimpleGrantedAuthority("ROLE_ADMIN"));
return list;
}
}
ここでloadUserByUsernameメソッドではデータベース情報のクエリーが完了し、フレームワークに必要なユーザー情報にカプセル化されます.
注意:
UserInfoは、データベース・ユーザー情報をカプセル化するエンティティ・クラスです.
getRolesはユーザーにロール情報を付与するために使用され、spring security認証時にユーザーはロール情報を持っていなければならない.ロール情報はデータベースから問合せられ、ここで直接エージェントに固定値を書いて示すことができる.
ユーザパスワードに接続された「{noop}」文字列は、パスワードを暗号化していないため、フレームワークにパスワードを認証する際に暗号化する必要がないことを伝えます.
3.テスト
プロジェクトを開始し、localhostにアクセスすると、ログインページにジャンプし、データベースに存在するアカウントとパスワードを入力するとログインに成功し、トップページindex.htmlにジャンプします.
三、まとめ
データベースを使用して認証を完了する鍵は、UserDetailsServiceインタフェースを実装し、loadUserByUsernameメソッドでフレームワークに必要なUserDetailsオブジェクトをカプセル化することです.すなわち、Userオブジェクトはフレームワークに戻り、フレームワークによって後続の認証操作を完了します.
認証に使用するuserServiceのbeanをspring securityのプロファイルに指定する必要があります.すなわち、loadUserByUsernameメソッドを実装したuserServiceです.
サンプルエンジニアリングの具体的なコードを表示する必要がある場合は、下のリンクをクリックしてコードクラウドにサンプルエンジニアリングアドレスを表示します.