Acegi通过数据库连接实现身份认证

本文介绍使用Acegi安全框架进行用户认证的过程,包括创建数据库表、配置数据源、设置认证提供程序及用户服务等关键步骤。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

好长时间没有写文章了,因为最近用到Acegi做安全认证,就把以前写的一个文章,翻出来晒晒,呵呵


1、建立两个表

CREATE TABLE users (
 username 
VARCHAR(50NOT NULL PRIMARY KEY,
 password 
VARCHAR(50NOT NULL,
 enabled 
BIT NOT NULL
);

CREATE TABLE authorities (
 username 
VARCHAR(50NOT NULL,
 authority 
VARCHAR(50NOT NULL
);
CREATE UNIQUE INDEX ix_auth_username ON authorities ( username, authority );

ALTER TABLE authorities ADD CONSTRAINT fk_authorities_users foreign key (username) REFERENCES users(username);

INSERT INTO users VALUES ('marissa''koala', true);
INSERT INTO users VALUES ('dianne''emu', true);
INSERT INTO users VALUES ('scott''wombat', true);
INSERT INTO users VALUES ('peter''opal', false);

INSERT INTO authorities VALUES ('marissa''ROLE_TELLER');
INSERT INTO authorities VALUES ('marissa''ROLE_SUPERVISOR');
INSERT INTO authorities VALUES ('dianne''ROLE_TELLER');
INSERT INTO authorities VALUES ('scott''ROLE_TELLER');
INSERT INTO authorities VALUES ('peter''ROLE_TELLER');


2、Spring 中建一个DataSource Bean

 <bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
  
<property name="driverClassName">
   
<value>com.mysql.jdbc.Driver</value>
  
</property>
  
<property name="url">
   
<value>jdbc:mysql://localhost:3306/eReview?autoReconnect=true&amp;amp;useUnicode=true&amp;amp;characterEncoding=utf-8&amp;amp;mysqlEncoding=utf8</value>
  
</property>
  
<property name="username">
   
<value>leo</value>
  
</property>
  
<property name="password">
   
<value>111111</value>
  
</property>
 
</bean>

注意:原来用dbcp的一个dataSource Class配置数据源,不成功,改为Spring2.0自带的驱动类后成功;

3、配置Spring的acegi配置文件
 

<bean id="daoAuthenticationProvider" class="org.acegisecurity.providers.dao.DaoAuthenticationProvider">
  
<property name="userDetailsService" ref="userDetailsService"/>
  
<property name="userCache">
   
<bean class="org.acegisecurity.providers.dao.cache.EhCacheBasedUserCache">
    
<property name="cache">
     
<bean class="org.springframework.cache.ehcache.EhCacheFactoryBean">
      
<property name="cacheManager">
       
<bean class="org.springframework.cache.ehcache.EhCacheManagerFactoryBean"/>
      
</property>
      
<property name="cacheName" value="userCache"/>
     
</bean>
    
</property>
   
</bean>
  
</property>
 
</bean>

 
<bean id="userDetailsService" class="org.acegisecurity.userdetails.jdbc.JdbcDaoImpl">
     
<property name="dataSource"><ref bean="dataSource"/></property>
     
<property name="usersByUsernameQuery">
       
<value>SELECT USERNAME, PASSWORD,ENABLED FROM USERS WHERE USERNAME=?</value>
     
</property>
     
<property name="authoritiesByUsernameQuery">
       
<value>
         SELECT username,authority FROM authorities WHERE username = ?
       
</value>
     
</property>
 
</bean>

另外,在定义“filterInvocationInterceptor”时,属性设置为:
  <property name="objectDefinitionSource">
   <value>
    CONVERT_URL_TO_LOWERCASE_BEFORE_COMPARISON
    PATTERN_TYPE_APACHE_ANT
    /**/*.action=IS_AUTHENTICATED_REMEMBERED
    /**=IS_AUTHENTICATED_ANONYMOUSLY
   </value>
  </property>

4、其他部分可参见Acegi的范例;

总结:
本方法只是实现了简单的用户身份认证的功能,其权限设置也相对简单,只要是合法用户,就可以访问*.action, 如果需要复杂业务相关的权限认证,还需要查看Acegi的详细教程 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值