zoukankan      html  css  js  c++  java
  • Spring Security 使用数据库用户进行认证

    本文参考或摘录自:http://haohaoxuexi.iteye.com/blog/2157769

    本文使用Spring Security自带的方式连接数据库对用户进行认证。

    1、Spring Security 默认的表脚本:

    /*
    Navicat MySQL Data Transfer
    
    Source Server         : localhost
    Source Server Version : 50621
    Source Host           : localhost:3306
    Source Database       : security
    
    Target Server Type    : MYSQL
    Target Server Version : 50621
    File Encoding         : 65001
    
    Date: 2014-12-10 15:49:04
    */
    
    SET FOREIGN_KEY_CHECKS=0;
    
    -- ----------------------------
    -- Table structure for authorities
    -- ----------------------------
    DROP TABLE IF EXISTS `authorities`;
    CREATE TABLE `authorities` (
      `id` int(11) NOT NULL AUTO_INCREMENT,
      `username` varchar(20) DEFAULT NULL,
      `authority` varchar(50) DEFAULT NULL,
      PRIMARY KEY (`id`)
    ) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8;
    
    -- ----------------------------
    -- Table structure for groups
    -- ----------------------------
    DROP TABLE IF EXISTS `groups`;
    CREATE TABLE `groups` (
      `id` int(11) NOT NULL AUTO_INCREMENT,
      `groupName` varchar(50) DEFAULT NULL,
      PRIMARY KEY (`id`)
    ) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8;
    
    -- ----------------------------
    -- Table structure for group_authorities
    -- ----------------------------
    DROP TABLE IF EXISTS `group_authorities`;
    CREATE TABLE `group_authorities` (
      `group_Id` int(11) NOT NULL AUTO_INCREMENT,
      `authority` varchar(50) DEFAULT NULL,
      PRIMARY KEY (`group_Id`)
    ) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8;
    
    -- ----------------------------
    -- Table structure for group_members
    -- ----------------------------
    DROP TABLE IF EXISTS `group_members`;
    CREATE TABLE `group_members` (
      `id` int(11) NOT NULL AUTO_INCREMENT,
      `userName` varchar(20) DEFAULT NULL,
      `group_Id` int(11) DEFAULT NULL,
      PRIMARY KEY (`id`)
    ) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8;
    
    -- ----------------------------
    -- Table structure for users
    -- ----------------------------
    DROP TABLE IF EXISTS `users`;
    CREATE TABLE `users` (
      `id` int(8) NOT NULL AUTO_INCREMENT,
      `userName` varchar(20) DEFAULT NULL,
      `password` varchar(50) DEFAULT NULL,
      `enabled` tinyint(4) DEFAULT NULL,
      PRIMARY KEY (`id`)
    ) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8;

    2、web.xml配置

    <?xml version="1.0" encoding="UTF-8"?>
    <web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
             xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
             xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"
             version="3.1">
        <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>
        <context-param>
            <param-name>contextConfigLocation</param-name>
            <param-value>/WEB-INF/applicationContext.xml,/WEB-INF/dispatcher-servlet.xml,/WEB-INF/spring-security.xml</param-value>
        </context-param>
        <context-param>
            <param-name>log4jConfigLocation</param-name>
            <param-value>/WEB-INF/log4j.properties</param-value>
        </context-param>
        <context-param>
            <param-name>log4jRefreshInterval</param-name>
            <param-value>60000</param-value>
        </context-param>
        <listener>
            <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
        </listener>
        <listener>
            <listener-class>org.springframework.web.util.Log4jConfigListener</listener-class>
        </listener>
        <servlet>
            <servlet-name>dispatcher</servlet-name>
            <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
            <load-on-startup>1</load-on-startup>
        </servlet>
        <servlet-mapping>
            <servlet-name>dispatcher</servlet-name>
            <url-pattern>/</url-pattern>
        </servlet-mapping>
    </web-app>

    2、spring-security配置:

    <?xml version="1.0" encoding="UTF-8"?>
    <beans xmlns="http://www.springframework.org/schema/beans"
           xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
           xmlns:security="http://www.springframework.org/schema/security"
           xsi:schemaLocation="http://www.springframework.org/schema/beans
           http://www.springframework.org/schema/beans/spring-beans.xsd
           http://www.springframework.org/schema/security
           http://www.springframework.org/schema/security/spring-security.xsd">
        <security:http auto-config="true">
            <security:intercept-url pattern="/**" access="ROLE_USER"></security:intercept-url>
        </security:http>
        <security:authentication-manager>
            <security:authentication-provider user-service-ref="userDetailsService">
                <security:password-encoder hash="md5"></security:password-encoder>
            </security:authentication-provider>
        </security:authentication-manager>
    
        <bean id="userDetailsService" class="org.springframework.security.core.userdetails.jdbc.JdbcDaoImpl">
            <property name="dataSource" ref="dataSource"/>   --指定数据源
            <property name="enableGroups" value="true"/>
        </bean>
    </beans>

     说明:<security:authentication-provider ref="myAuthenticationProvider"/>是指使用实现了自己的AuthenticationProvider

    <security:authentication-provider user-service-ref="userDetailsService">是指定使用的UserDetailsService

    3、数据源配置:

    <?xml version="1.0" encoding="UTF-8"?>
    <beans xmlns="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.xsd">
        <bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource" destroy-method="close">
            <property name="driverClass" value="com.mysql.jdbc.Driver"></property>
            <property name="jdbcUrl" value="jdbc:mysql://localhost:3306/security"></property>
            <property name="user" value="root"></property>
            <property name="password" value="root"></property>
            <property name="acquireIncrement" value="5"></property>  <!-- 当连接池中的连接用完时,C3P0一次性创建新连接的数目2 -->
            <property name="initialPoolSize" value="10"></property>  <!-- 初始化时创建的连接数,必须在minPoolSize和maxPoolSize之间 -->
            <property name="minPoolSize" value="5"></property>
            <property name="maxPoolSize" value="20"></property>
            <!-- 最大空闲时间,超过空闲时间的连接将被丢弃
            [需要注意:mysql默认的连接时长为8小时(28800)【可在my.ini中添加 wait_timeout=30(单位秒)设置连接超时】,这里设置c3p0的超时必须<28800]
            -->
            <property name="maxIdleTime" value="300"></property>
            <property name="idleConnectionTestPeriod" value="60"></property> <!-- 每60秒检查连接池中的空闲连接 -->
            <property name="maxStatements" value="20"></property>  <!-- jdbc的标准参数  用以控制数据源内加载的PreparedStatement数量,但由于预缓存的Statement属 于单个Connection而不是整个连接 -->
        </bean>
    </beans>
  • 相关阅读:
    jBox使用方法
    第五章 引用类型
    第四章 变量、作用域、内存问题
    第二章 在HTML中使用JavaScript
    第三章 基本概念
    第一章 JavaScript简介
    ecmall 添加自定义挂件以及解决一直loading的问题
    急急如律令!火速搭建一个C#即时通信系统!(附源码分享——高度可移植!)
    委托笔记
    Oracle ORA-01461:仅可以为插入LONG列的LONG值赋值
  • 原文地址:https://www.cnblogs.com/tyb1222/p/4155670.html
Copyright © 2011-2022 走看看