Springecurity2.0.4+OpenID完整配置攻略(三)

2014-11-24 01:42:42 · 作者: · 浏览: 3
.security.providers.dao.cache.EhCacheBasedUserCache">

class="org.springframework.cache.ehcache.EhCacheFactoryBean">

class="org.springframework.cache.ehcache.EhCacheManagerFactoryBean">

value="classpath:ehcache-security.xml" />

class="org.springframework.security.intercept.web.FilterSecurityInterceptor">

ref="authenticationManager" />

ref="accessDecisionManager" />

ref="databaseFilterInvocationDefinitionSource" />

class="org.springframework.security.vote.AffirmativeBased">

class="org.springframework.security.vote.RoleVoter">

class="org.springframework.security.ui.rememberme.TokenBasedRememberMeServices"

p:key="springsecurity"

p:userDetailsService-ref="userDetailsService"/>

class="org.springframework.security.providers.dao.DaoAuthenticationProvider">

class="org.springframework.security.providers.openid.OpenIDAuthenticationProvider">

class="org.springframework.security.providers.encoding.Md5PasswordEncoder"/>

class="org.openjweb.core.springsecurity.UserDetailsServiceImpl">

class="org.springframework.security.intercept.web.DefaultFilterInvocationDefinitionSource">

type="org.springframework.security.util.UrlMatcher"

ref="antUrlPathMatcher" />

class="org.springframework.security.util.AntUrlPathMatcher" />

class="org.openjweb.core.springsecurity.RequestMapFactoryBean"

init-method="init">

class="org.springframework.security.event.authentication.LoggerListener"/>

注意配置文件中的这段代码:

class="org.openjweb.core.springsecurity.UserDetailsServiceImpl">

org.openjweb.core.springsecurity.UserDetailsServiceImpl是OpenJWeb中实现Spring Security 的UserDetailsService接口的实现类。我们 此实现类中增加一段代码,此段代码获取openID认证以后的OpenID账号,检查数据库表comm_user中是否存在此账号,如果不存在,则认证成功后自动向数据库表添加一条账号记录,并且为此账号分配一个网站会员角色。下面是org.openjweb.core.springsecurity.UserDetailsServiceImpl的代码:

package org.openjweb.core.springsecurity;

import org.apache.log4j.Logger;

import org.openjweb.core.dao.IBaseDao;

import org.openjweb.core.entity.CommUser;

import org.openjweb.core.entity.CommUserRole;

import org.openjweb.core.service.IDBSupportService;

import org.openjweb.core.service.ServiceLocator;

import org.openjweb.core.util.StringUtil;

import org.springframework.dao.DataAccessException;

import org.springframework.security.userdetails.UserDetails;

import org.springframework.security.userdetails.UsernameNotFoundException;

public class UserDetailsServiceImpl implements IUserService

{

private static final Logger logger = Logger.getLogger(UserDetailsServiceImpl.class);

private IBaseDao defaultDao;

public UserDetailsServiceImpl (IBaseDao dao)

{

this.defaultDao = dao;

}

public UserDetails loadUserByUsername(String userName) throws UsernameNotFoundException, DataAccessException

{

CommUser user = null;

try

{

user = (CommUser)this.defaultDao.findById(CommUser.class.getName(), "loginId", userName);

if(user.getIsInUse()!=null&&user.getIsInUse().equals("Y"))

{

}

else

{

logger.info("用户被锁定......");

throw new UsernameNotFoundException(userName); //被锁定

}

}

catch(Excep