#目標と概要
ログイン画面にて、ユーザ名とパスワードを要求。
予め、DBに登録しておいたユーザーテーブルと照合し、ログイン成功可否処理をする。
#環境
SpringBoot 1.5.8.RELEASE
MySQL5.7
O/RマッパーMyBatis
Gradle使用
使用するDBのテーブル(t_customer)
id | username | password |
---|---|---|
1 | hoge@hoge.co.jp | 12345678 |
##依存関係
build.gradle
dependencies {
compile group: 'org.thymeleaf.extras', name: 'thymeleaf-extras-springsecurity4'
compile group: 'org.apache.commons', name: 'commons-lang3', version: '3.5'
compile('org.springframework.boot:spring-boot-starter-security')
compile('org.mybatis.spring.boot:mybatis-spring-boot-starter:1.3.1')
compile('org.springframework.boot:spring-boot-starter-thymeleaf')
compile('org.springframework.boot:spring-boot-starter-web')
runtime('mysql:mysql-connector-java')
testCompile('org.springframework.boot:spring-boot-starter-test')
}
#手順
##DB接続設定
application.properties
spring.datasource.url=jdbc:mysql://localhost/〇〇?autoReconnect=true&useSSL=false
spring.datasource.username=root
spring.datasource.password=0000
spring.datasource.driverClassName=com.mysql.jdbc.Driver
適宜、環境に合わせて変更してください。
##Mapper、Entity及び定義ファイルの作成
TCustomerEntity.java
private Integer id;
private String username;
private String password;
//setter,getter省略
TCustomerMapper.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<!--次に作成するMapperInterfaceをFQCNで指定-->
<mapper namespace="com.example.demo.model.mapper.TCustomerMapper">
<!--EntityクラスのプロパティとDBのデータをマップする、対応するEntityクラスは、FQCNで指定-->
<resultMap id="BaseResultMap" type="com.example.demo.model.entity.TCustomerEntity" />
<!--今回利用するステートメントの定義-->
<select id="findByUsername" parameterType="java.lang.String" resultMap="BaseResultMap">
select
id,username,password
from t_customer
where user_id = #{username,jdbcType=VARCHAR}
</select>
TCustomerMapper.java
//Mapperinterfaceであることを明記
@Mapper
public interface TCustomerMapper {
TCustomer findByUsername(String username);//xmlで定義したステートメント
}
ここまでが、MyBatisの設定になります。
つぎはDB認証を実装します。
##認証ユーザを管理するクラスの作成
この役割はEntityクラスと併用してもよいのですが、例に習ってEntityインスタンスを参照する形にします。
また、今回はユーザのロック等は実装しません。
SpringSecurityで定義されているUserDetailsを実装する形で作ります。
TCustomerUserDetails.java
public class TCustomerUserDetails implements UserDetails {
private TCustomerEntity tCustomer;
public TCustomerUserDetails(TCustomerEntity tCustomer) {
// TODO 自動生成されたコンストラクター・スタブ
this.tCustomer = tCustomer;
}
@Override
public Collection<? extends GrantedAuthority> getAuthorities() {
// TODO 自動生成されたメソッド・スタブ
return null;
}
@Override
public String getPassword() {
// TODO 自動生成されたメソッド・スタブ
return this.tCustomer.getPassword();
}
@Override
public String getUsername() {
// TODO 自動生成されたメソッド・スタブ
return this.tCustomer.getUserId();
}
@Override
public boolean isAccountNonExpired() {
// TODO 自動生成されたメソッド・スタブ
return true;
}
@Override
public boolean isAccountNonLocked() {
// TODO 自動生成されたメソッド・スタブ
return true;
}
@Override
public boolean isCredentialsNonExpired() {
// TODO 自動生成されたメソッド・スタブ
return true;
}
@Override
public boolean isEnabled() {
// TODO 自動生成されたメソッド・スタブ
return true;
}
}
今回はここまで、次回は認証処理を実行するServiceクラスとSecurityに関するConfigクラスを作成していきます。