`
demojava
  • 浏览: 548953 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

Spring—Acegi系统安全—身份证管理—基于数据库存储用户信息认证

    博客分类:
  • JAVA
阅读更多

//数据库脚本:mysql.sql

DROP DATABASE IF EXISTS sampledb;

CREATE DATABASE sampledb DEFAULT CHARACTER SET utf8;

USE sampledb;

CREATE TABLE T_USER (

   USER_ID INTEGER NOT NULL AUTO_INCREMENT,

   USERNAME VARCHAR(30) NOT NULL,

   PASSWORD VARCHAR(30) DEFAULT NULL,

   STATUS TINYINT(1) NOT NULL DEFAULT '0',

   PRIMARY KEY (`USER_ID`),

   UNIQUE KEY `USERNAME` (`USERNAME`)

);

CREATE TABLE T_USER_PRIV (

  USER_ID INTEGER NOT NULL DEFAULT '0',

  PRIV_NAME VARCHAR(30) DEFAULT NULL,

  PRIMARY KEY (USER_ID, PRIV_NAME)

);

 

INSERT INTO T_USER (USER_ID, USERNAME, PASSWORD, STATUS) VALUES

  (1,'tom','tom',1),

  (2,'john','john',1);

 

INSERT INTO T_USER_PRIV (USER_ID, PRIV_NAME) VALUES

  (1,'PRIV_1'),

  (1,'PRIV_2'),

  (1,'PRIV_COMMON'),

  (2,'PRIV_1'),

  (2,'PRIV_COMMON');

 COMMIT;

 

在web.xml中配置信息

<?xml version="1.0" encoding="UTF-8"?>

<web-app version="2.4" xmlns="http://java.sun.com/xml/ns/j2ee"

    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

    xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee

    http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">

    <context-param>  <!-- 指定配置文件的相对位置 -->

         <param-name>contextConfigLocation</param-name>

         <param-value>

            classpath:applicationContext.xml,

            classpath:applicationContext-acegi-plugin.xml

         </param-value>

    </context-param>

   

    <filter> <!--   创建Acegi 安全过滤器的的代理对象 -->

         <filter-name>AcegiFilterChainProxy</filter-name>

         <filter-class>

             org.acegisecurity.util.FilterToBeanProxy 

         </filter-class>

         <!--  org.acegisecurity.util.FilterChainProxy  这个对象将在spring的配置文件中 -->

         <init-param>

             <param-name>targetClass</param-name>

             <param-value>

                  org.acegisecurity.util.FilterChainProxy

             </param-value>

         </init-param>

    </filter>

    <filter-mapping>

         <filter-name>AcegiFilterChainProxy</filter-name>

         <url-pattern>/*</url-pattern> <!-- 这个过滤器将拦截所有请求 -->

    </filter-mapping>

   

    <listener>  <!-- Spring的上下文的监听器 -->

         <listener-class>

             org.springframework.web.context.ContextLoaderListener

         </listener-class>

    </listener>

<listener>

         <listener-class>

             org.acegisecurity.ui.session.HttpSessionEventPublisher

         </listener-class>

    </listener>

 

    <!--session 超时定义-->

    <session-config>

         <session-timeout>60</session-timeout>

    </session-config>

 

    <!--默认首页定义-->

    <welcome-file-list>

         <welcome-file>index.jsp</welcome-file>

         <welcome-file>index.html</welcome-file>

    </welcome-file-list>

</web-app>

 

 

下面我们来看看spring的配置文件

 

<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd">

<beans>

    <!--

        /**=channelProcessingFilter,httpSessionContextIntegrationFilter,logoutFilter,authenticationProcessingFilter,anonymousProcessingFilter,exceptionTranslationFilter,concurrentSessionFilter,filterInvocationInterceptor

    -->

   

    <!-- 创建代理对象 -->

    <bean id="filterChainProxy"

         class="org.acegisecurity.util.FilterChainProxy">

         <property name="filterInvocationDefinitionSource">

             <value>

                  CONVERT_URL_TO_UPPERCASE_BEFORE_COMPARISON

                  PATTERN_TYPE_APACHE_ANT               /**=channelProcessingFilter,httpSessionContextIntegrationFilter,authenticationProcessingFilter,logoutFilter,rememberMeProcessingFilter,anonymousProcessingFilter,exceptionTranslationFilter,concurrentSessionFilter,filterSecurityInterceptor

             </value>

         </property>

    </bean>

    <!--CONVERT_URL_TO_UPPERCASE_BEFORE_COMPARISON表示的是判读的是URL PATTERN_TYPE_APACHE_ANT 表示是的使用的是ANT的路径风格进行配置匹配的URL 如果不写Acgi将使用正则表达式来解析这个URL 这个地方不要使用会出或换行 -->

   

    <!-- authenticationProcessingFilter 使用认证的处理器过滤匹配的URL  -->

    <!--

         每次request HttpSessionContextIntegrationFilterSession中获取Authentication对象,在request完后

         又把Authentication对象保存到Session中供下次request使用,filter必须其他Acegi filter前使用

    -->

    <bean id="httpSessionContextIntegrationFilter"

         class="org.acegisecurity.context.HttpSessionContextIntegrationFilter" />

    <!--

         servlet spec差不多,处理登陆请求

         authenticationFailureUrl定义登陆失败时转向的页面

         defaultTargetUrl定义登陆成功时转向的页面

         filterProcessesUrl定义登陆请求的页面

         rememberMeServices用于在验证成功后添加cookie信息

    -->

    <bean id="authenticationProcessingFilter"

         class="org.acegisecurity.ui.webapp.AuthenticationProcessingFilter">

         <property name="authenticationManager"   ref="authenticationManager" />

         <property name="authenticationFailureUrl"   value="/index.jsp?login_error=1" /><!-- 认证失败后的URL -->

         <property name="defaultTargetUrl" value="/main.jsp" /><!-- 跳转后的URL -->

         <property name="filterProcessesUrl"  value="/j_acegi_security_check" /><!-- 要过滤的URL  -->

         <property name="rememberMeServices" ref="rememberMeServices" /><!-- 登录时将用户名或密码保存到 cookie -->

    </bean>

   

    <!-- 认证的处理过滤器 -->

    <bean id="authenticationManager"

class="org.acegisecurity.providers.ProviderManager">

         <property name="providers">

             <list>

                  <ref local="daoAuthenticationProvider" />

                  <bean class="org.acegisecurity.providers.rememberme.RememberMeAuthenticationProvider">

                       <property name="key" value="baobaotao" />

                  </bean>

                  <ref local="anonymousAuthenticationProvider" />

             </list>

         </property>

         <property name="sessionController" ref="concurrentSessionController"/>

    </bean>

<!-- 基于数据库存储的用户信息获取 -->

    <bean id="daoAuthenticationProvider" class="org.acegisecurity.providers.dao.DaoAuthenticationProvider">

         <property name="userDetailsService" ref="userDetailsService" />

<!--#1 -->

 

    </bean>

<!--  基于数据库的中使用列表的对象 org.acegisecurity.userdetails.jdbc.JdbcDaoImpl 这个处理类是固定的 -->

  <bean id="userDetailsService"

       class="org.acegisecurity.userdetails.jdbc.JdbcDaoImpl">

       <property name="dataSource" ref="dataSource" />

       <property name="usersByUsernameQuery">

           <value>

                SELECT username,password,1 FROM t_user WHERE status='1'

                AND username = ?

           </value>

           <!-- 根据用户名查询用户的SQL语句 -->

       </property>

       <property name="authoritiesByUsernameQuery">

           <value>

                SELECT u.username,p.priv_name FROM t_user u,t_user_priv

                p WHERE u.user_id =p.user_id AND u.username = ?

           </value>

       <!-- 根据用户名查询用户权限的sql语句 -->

       </property>

  </bean>

//jdbcDaoImpl通过usersByUsernameQueryauthoritiesByUsernameQuery属性的定义查询用户信息和用户的权限的sql语句,实际上jdbcDaoImpl为以上两个属性提供了默认

分享到:
评论

相关推荐

    spring_acegi精彩实例,带MYSQL数据库脚本,保证能运行

    spring_acegi精彩实例,带MYSQL数据库脚本,保证能运行spring_acegi精彩实例,带MYSQL数据库脚本,保证能运行spring_acegi精彩实例,带MYSQL数据库脚本,保证能运行 spring_acegi精彩实例,带MYSQL数据库脚本,保证...

    Spring Acegi权限控制

    用户表存储用户基本信息,角色表存储角色信息,而用户角色关联表用于建立用户和角色的多对多关系。在Acegi中,我们可以基于这些数据来实现RBAC,例如定义`ROLE_USER`和`ROLE_ADMIN`角色,并分配给不同的用户。 此外...

    spring acegi 详细文档

    首先,Acegi的主要目标是保护Spring应用免受非法访问,它提供了丰富的功能来实现用户认证、会话管理、权限控制以及安全相关的异常处理。Acegi的核心组件包括`AuthenticationManager`、`AccessDecisionManager`和`...

    基于spring的Acegi安全框架认证与授权的分析及扩展.pdf

    ### 基于Spring的Acegi安全框架认证与授权的分析及扩展 #### 1. Acegi安全框架的概述 Acegi(后更名为Spring Security)是Spring框架中的一个子项目,专注于提供强大的安全功能,包括认证、授权以及保护web应用...

    实战Acegi:使用Acegi作为基于Spring框架的WEB应用的安全框架

    Acegi是一个专门为SpringFramework应用提供安全机制的开放源代码项目,全称为Acegi Security System for Spring,当前版本为 0.8.3。它使用了Spring的方式提供了安全和认证安全服务,包括使用Bean Context,拦截器和...

    Spring ACEGI手册(部份)

    1. **身份验证**: 包括基于内存、数据库、LDAP等多种方式的用户认证。 2. **授权**: 支持基于角色的访问控制(RBAC),可以自定义访问策略,如访问控制表达式(ACE)。 3. **会话管理**: 可以设置会话超时、会话...

    Spring Acegi sample 基于数据库的DAO认证实现 c3p0做连接池技术

    acegi sample 基于数据库的DAO认证实现 Mysql的建表脚本在db目录下 为了减小体积,已经将WEB-INF\lib下的依赖包删除,请自行下载以下包,并拷贝至WEB-INF\lib下: spring-1.2.4.jar acegi-security-0.8.3.jar aop...

    aceig构建基于数据库的用户信息认证Http Basic认证(2)

    在IT行业中,安全是至关重要的一个领域,特别是对于基于数据库的用户信息认证系统。Acegi Security是Spring Security的前身,它提供了一套强大的安全框架,用于保护Java Web应用程序。本篇将深入探讨如何利用Acegi ...

    Spring acegi 3 文档

    Spring Acegi 安全框架是 Spring 框架的一个扩展,专门用于实现企业级应用的安全管理。在 Spring Acegi 3 中,它提供了全面的身份验证、授权和会话管理功能,为 Java 开发者提供了一套强大的安全解决方案。虽然 ...

    Spring Acegi(2)

    Spring Acegi(现已被Spring Security替代)为Spring应用提供了全面的安全管理功能,包括身份验证、授权、会话管理以及基于角色的访问控制。本文将深入探讨Spring Acegi的核心概念和使用方法。 首先,Spring Acegi...

    spring acegi 使用工程demo

    Spring Acegi是一个安全框架,它为Spring应用提供了全面的安全管理功能。这个"spring acegi 使用工程demo"显然是一个示例项目,旨在帮助开发者理解和实践如何在Spring应用中集成和使用Acegi安全框架。 首先,Acegi...

    spring的acegi应用

    标题“spring的acegi应用”指的是在Spring框架中使用Acegi安全模块进行权限管理和用户认证的一个主题。Acegi是Spring早期的一个安全组件,后来发展成为Spring Security,是Spring生态系统中的重要部分,用于提供全面...

    spring Acegi例子,很简单的一个acegi实例,容易理解

    Spring Acegi是一个安全框架,它为Spring应用提供了全面的安全管理解决方案。这个例子是为初学者设计的,旨在帮助他们快速理解和应用Acegi框架。Acegi(现在已被Spring Security替代)在Spring应用程序中提供了身份...

    Spring Security 把授权信息写入数据库

    在处理与数据库交互方面,Spring Security提供了更强大的支持,包括长期的remember-me功能和基于数据库的角色与用户管理API。 24.2. 目标 在原有应用中,用户信息和资源访问控制已经在数据库中管理。目标是将现有...

    spring Acegi

    Spring安全系统:Acegi Security Acegi简介! Acegi安全系统,是一个用于Spring Framework的安全框架,能够和目前流行的Web容器无缝集成。它使用了Spring的方式提供了安全和认证安全服务,包括使用Bean Context,...

    Acegi-spring安全框架

    Acegi-Spring安全框架是一个专为基于Spring的企业应用设计的安全框架,现在被称为Spring Security。它提供了声明式的安全访问控制,允许开发者在Spring容器中配置安全相关的Bean,利用Spring的依赖注入(IoC)和面向...

    spring acegi

    Spring Acegi是Spring Security的前身,它为Java企业级应用提供了强大的访问控制和安全框架。在深入了解Spring Acegi之前,我们需要先理解Spring Security的基本概念。Spring Security是一个全面的框架,用于保护...

Global site tag (gtag.js) - Google Analytics