pom.xml 設定
Spring Framework 3.1.1.RELEASE との組み合わせで deprecated 警告が発生。
Spring Framework を 3.2.8.RELEASE にバージョンアップ。
velocity 関連が context から context-support に移動したため、これも追加。
<org.springframework-version>3.2.8.RELEASE</org.springframework-version>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context-support</artifactId>
<version>${org.springframework-version}</version>
</dependency>
<dependency>
<groupId>org.springframework.security</groupId>
<artifactId>spring-security-web</artifactId>
<version>3.2.3.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework.security</groupId>
<artifactId>spring-security-config</artifactId>
<version>3.2.3.RELEASE</version>
</dependency>
MySQL テーブル作成
password フィールドの長さがマニュアル通りだと、sha256 暗号化した場合に足りないので変更する。
create table users(
username varchar(50) not null primary key,
password varchar(100) not null,
enabled boolean not null
);
create table authorities (
username varchar(50) not null,
authority varchar(50) not null,
constraint fk_authorities_users foreign key(username) references users(username)
);
create unique index ix_auth_username on authorities (username,authority);
create table persistent_logins (
username varchar(64) not null,
series varchar(64) primary key,
token varchar(64) not null,
last_used timestamp not null
);
users にレコード追加
password は SHA256 で暗号化、標準で
パスワード{ユーザ名}
例)pass{s6131}
を暗号化するので、ユーザ登録処理を自前で作るまでは、オンラインハッシュジェネレータ等で上記のハッシュを取得して指定する。
(大文字の場合、全て小文字に変換して登録する。)
username password enabled
s6131 da205f3776042925d23bd7d0ca4aae55bc4e17ef245743d5ab5e6c267a9b8504 1
autorities にレコード追加
username authority
s6131 ROLE_ADMIN
s6131 ROLE_USER
persistent_logins は Remember Me にチェックが入っていれば自動的にレコード作成する。
web.xml に追加
<filter>
<filter-name>springSecurityFilterChain</filter-name>
<filter-class>org.springframework.web.filter.DelegatingFilterProxy</filter-class>
</filter>
<filter-mapping>
<filter-name>springSecurityFilterChain</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
root-context.xml に追加
<bean id="myUserDetailsService" class="org.springframework.security.core.userdetails.jdbc.JdbcDaoImpl">
<property name="dataSource" ref="dataSource"/>
</bean>
<sec:authentication-manager>
<sec:authentication-provider user-service-ref='myUserDetailsService'>
<sec:password-encoder hash="sha-256">
<sec:salt-source user-property="username"/>
</sec:password-encoder>
</sec:authentication-provider>
</sec:authentication-manager>
<sec:http auto-config="true">
<sec:intercept-url pattern="/login*" access="ROLE_ANONYMOUS" />
<sec:intercept-url pattern="/**" access="ROLE_USER" />
<sec:form-login login-page="/login" default-target-url="/" authentication-failure-url="/login?error=true" />
<sec:logout logout-url="/logout" logout-success-url="/login" />
<sec:remember-me data-source-ref="dataSource"/>
</sec:http>
src/main/java/jp/s6131/sample/controller/HomeController.java に追加
@RequestMapping(value = "/login", method = RequestMethod.GET)
public String login(HttpServletRequest req, Locale locale, Model model) {
return "login";
}
src/main/webapp/WEB-INF/views/login.jsp を作成
<html>
<head>
<title>Login</title>
</head>
<body>
<form action="j_spring_security_check" method="post">
<p>
UserName :
<input type="text" required="true" autofocus="true" name="j_username" />
</p>
<p>
Password :
<input type="password" required="true" name="j_password" />
</p>
<p>
Remember Me :
<input type="checkbox" name="_spring_security_remember_me" />
</p>
<button type="submit" name="login">Login</button>
</form>
</body>
</html>

人気ブログランキングへ