同じためにそこにたくさんのtutsがあります、ただ適切にグーグルする必要があります。
とにかく、私がこれまでに見つけた最高のもの(ほとんどすべての春の房)はKramsであり、これが基本的な春のセキュリティのためのものです。
http://krams915.blogspot.com/2010/12/spring-security-mvc-integration_18.html
UserDetailServiceを実装するためのリンクは次のとおりです
http://krams915.blogspot.in/2012/01/spring-security-31-implement_5023.html
他のいくつかは:
- 例による春
- MKヤング
- そしてSpringSourceサイト自体
編集
これは私自身のアプリケーションが認証を行う方法です(私は外部認証を使用しないことに注意してください。DBから詳細を取得するだけですが、それほど問題にはならないはずです)。
私のsecurity-context.xml
:
<?xml version="1.0" encoding="UTF-8"?>
<beans:beans xmlns="http://www.springframework.org/schema/security"
xmlns:beans="http://www.springframework.org/schema/beans"
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-3.0.xsd
http://www.springframework.org/schema/security http://www.springframework.org/schema/security/spring-security-3.0.xsd">
<global-method-security pre-post-annotations="enabled" jsr250-annotations="enabled" secured-annotations="enabled">
</global-method-security>
<http use-expressions="true">
<intercept-url pattern="/favicon.ico" access="permitAll" />
<intercept-url pattern="/static/**" access="permitAll"/>
<intercept-url pattern="/login.jsp*" access="permitAll"/>
<intercept-url pattern="/Admin/**" access="hasAnyRole('ROLE_SUPER_USER')"/>
<intercept-url pattern="/**" access="hasAnyRole('ROLE_USER','ROLE_SUPER_USER','ROLE_ADMIN'"/>
<form-login login-page="/login.jsp" authentication-failure-url="/login.jsp?login_error=1" />
<http-basic/>
<logout logout-success-url="/login.jsp"/>
<remember-me user-service-ref="loginService" /
</http>
<authentication-manager>
<authentication-provider user-service-ref="loginService">
<password-encoder hash="md5"/>
</authentication-provider>
</authentication-manager>
<beans:bean id="loginService" class="com.indyaah.service.LoginService">
</beans:bean>
<beans:bean id="authService" class="com.indyaah.service.AuthService" />
</beans:beans>
loginService
ご覧のとおり、クラスのBeanである認証プロバイダーとして名前が付けられたBeanを指定しましたcom.indyaah.service.LoginService
。
同じコードは次のとおりです
。Pl注不要なコードを切り捨てました
package com.indyaah.service;
..
@Service
public class LoginService implements UserDetailsService {
....
/**
* Implementation for custom spring security UserDetailsService
*/
public UserDetails loadUserByUsername(String userName) throws UsernameNotFoundException, DataAccessException {
logger.debug("Inside get member by username");
if (userName != null) {
Member memberVO = memberMapper.getMemberByUsername(userName);
if (memberVO != null) {
ArrayList<String> authList = memberRolesMapper.getMemberRoles(memberVO.getMemberId());
List<GrantedAuthority> authorities = new ArrayList<GrantedAuthority>();
for (String role : authList) {
System.out.println(role);
authorities.add(new GrantedAuthorityImpl(role.toString()));
}
if (memberVO.getEnabled()) {
User user = new User(memberVO.getUserName(), memberVO.getPassword(), true, true, true, true, authorities);
return user;
} else {
logger.error("User with login: " + userName + " not Enabled in database. Authentication failed for user ");
throw new UsernameNotFoundException("User Not Enabled");
}
} else {
logger.error("User with login: " + userName + " not found in database. Authentication failed for user ");
throw new UsernameNotFoundException("user not found in database");
}
} else {
logger.error("No User specified in the login ");
throw new UsernameNotFoundException("No username specified");
}
}
}
ここで2つのことに注意してください。
- ユーザーの詳細(私の場合はDBから取得します)を取得し、それを新しい
org.springframework.security.core.userdetails.User
オブジェクトの下に置きます。このオブジェクトは、メソッドによってSpringSecurityに返されます。
- また、オーソリティ(DBアーキテクチャに従ってDBとは別にロードしますが、シナリオは異なる場合があります)を使用して、同じユーザーオブジェクトを介してセキュリティを強化します。