Spring Security 杂记1

在未接触Spring Security之前,看过有关Shiro的博客和资料,不少博客说Spring Security相对Shiro复杂,Spring Security的内部实现或许复杂于Shiro,但是Spring Security和Shiro也都只是框架,它们都如同兵器,我们才不管铸造它们多么艰辛多么困难,只要我们能驾驭和使用它,它们才能称的上是我们的法宝。我构建项目习惯使用Maven,加入Maven的依赖必不可少,具体引入的依赖见如下代码段。

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
  <modelVersion>4.0.0</modelVersion>
  <groupId>com.raze</groupId>
  <artifactId>iyw</artifactId>
  <packaging>war</packaging>
  <version>0.0.1-SNAPSHOT</version>
  <name>iyw Maven Webapp</name>
  <url>http://maven.apache.org</url>
  <properties>
  	 <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
     <spring.version>4.1.2.RELEASE</spring.version>
  </properties> 
  
  <dependencies>
  
	<!-- junit -->
    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>4.10</version>
      <scope>test</scope>
    </dependency>
    
    <!-- slf4j -->
    <dependency>
	  <groupId>org.slf4j</groupId>
      <artifactId>slf4j-api</artifactId>
	  <version>1.7.12</version>
	</dependency>
	
	<!-- logback -->
	<dependency>
	  <groupId>ch.qos.logback</groupId>
	  <artifactId>logback-core</artifactId>
	  <version>1.1.3</version>
	</dependency>
	<dependency>
	  <groupId>ch.qos.logback</groupId>
	  <artifactId>logback-classic</artifactId>
	  <version>1.1.3</version>
	  <exclusions>
		<exclusion>
		  <artifactId>slf4j-api</artifactId>
		  <groupId>org.slf4j</groupId>
		</exclusion>
	  </exclusions>
	</dependency>
    
    <!-- TOMCAT -->
    <dependency>
	  <groupId>org.apache.tomcat</groupId>
	  <artifactId>tomcat-catalina</artifactId>
	  <version>7.0.67</version>
	</dependency>
	<dependency>
	  <groupId>org.apache.tomcat</groupId>
	  <artifactId>tomcat-dbcp</artifactId>
	  <version>7.0.67</version>
	</dependency>
	<dependency>
	  <groupId>org.apache.tomcat.embed</groupId>
	  <artifactId>tomcat-embed-core</artifactId>
	  <version>7.0.67</version>
	</dependency>
	<dependency>
	  <groupId>org.apache.tomcat.embed</groupId>
	  <artifactId>tomcat-embed-logging-juli</artifactId>
	  <version>7.0.42</version>
	</dependency>
	<dependency>
	  <groupId>org.apache.tomcat</groupId>
	  <artifactId>tomcat-juli</artifactId>
	  <version>7.0.42</version>
	</dependency>
	<dependency>
	  <groupId>org.apache.tomcat.embed</groupId>
	  <artifactId>tomcat-embed-jasper</artifactId>
	  <version>7.0.42</version>
	</dependency>
	<dependency>
	  <groupId>org.apache.tomcat</groupId>
	  <artifactId>tomcat-jasper</artifactId>
	  <version>7.0.42</version>
	</dependency>
	<dependency>
	  <groupId>org.apache.tomcat</groupId>
	  <artifactId>tomcat-jasper-el</artifactId>
	  <version>7.0.42</version>
	</dependency>
	<dependency>
	  <groupId>org.apache.tomcat</groupId>
	  <artifactId>tomcat-jsp-api</artifactId>
	  <version>7.0.42</version>
	</dependency>
	
	<!-- MyBatis-Spring -->
    <dependency>
      <groupId>org.mybatis</groupId>
      <artifactId>mybatis-spring</artifactId>
      <version>1.2.2</version>
      <scope>compile</scope>
    </dependency>
     
    <!-- MyBatis -->
    <dependency>
      <groupId>org.mybatis</groupId>
      <artifactId>mybatis</artifactId>
      <version>3.2.8</version>
      <scope>compile</scope>
    </dependency>
     
    <!-- Spring -->
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-core</artifactId>
        <version>${spring.version}</version>
    </dependency>
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-context</artifactId>
        <version>${spring.version}</version>
        <scope>runtime</scope>
    </dependency>
    <dependency>
       <groupId>org.springframework</groupId>
       <artifactId>spring-web</artifactId>
       <version>${spring.version}</version>
    </dependency>
    <dependency>
       <groupId>org.springframework</groupId>
       <artifactId>spring-orm</artifactId>
       <version>${spring.version}</version>
    </dependency>
    <dependency>
       <groupId>org.springframework</groupId>
       <artifactId>spring-jdbc</artifactId>
       <version>${spring.version}</version>
    </dependency>
    <dependency>
       <groupId>org.springframework</groupId>
       <artifactId>spring-tx</artifactId>
       <version>${spring.version}</version>
    </dependency>
    <dependency>
       <groupId>org.springframework</groupId>
       <artifactId>spring-webmvc</artifactId>
       <version>${spring.version}</version>
    </dependency>
    
    <!-- Spring Security -->
    <dependency>
       <groupId>org.springframework.security</groupId>
       <artifactId>spring-security-core</artifactId>
       <version>4.0.3.RELEASE</version>
    </dependency>
    <dependency>
       <groupId>org.springframework.security</groupId>
       <artifactId>spring-security-web</artifactId>
       <version>4.0.3.RELEASE</version>
	</dependency>
	<dependency>
       <groupId>org.springframework.security</groupId>
       <artifactId>spring-security-config</artifactId>
       <version>4.0.3.RELEASE</version>
	</dependency>
    <dependency>  
       <groupId>org.springframework.security</groupId>  
       <artifactId>spring-security-taglibs</artifactId>  
       <version>4.0.3.RELEASE</version>  
    </dependency>  
	
     
    <!-- DBCP -->
    <dependency>
        <groupId>org.apache.commons</groupId>
        <artifactId>commons-dbcp2</artifactId>
        <version>2.0.1</version>
        <scope>compile</scope>
    </dependency>
    <dependency>
        <groupId>commons-dbcp</groupId>
        <artifactId>commons-dbcp</artifactId>
        <version>20030825.184428</version>
        <scope>compile</scope>
    </dependency>
     
    <!-- commons-pool -->
    <dependency>
        <groupId>commons-pool</groupId>
        <artifactId>commons-pool</artifactId>
        <version>1.4</version>
    </dependency>
     
    <!-- mysql connector java -->
    <dependency>
        <groupId>mysql</groupId>
        <artifactId>mysql-connector-java</artifactId>
        <version>5.1.34</version>
        <scope>compile</scope>
    </dependency>
	
	<!-- ojdbc -->
	<dependency>
    	<groupId>com.oracle</groupId>
    	<artifactId>ojdbc14</artifactId>
    	<version>10.2.0.4.0</version>
	</dependency>
	
	<!-- fastjson -->
	<dependency>
    	<groupId>com.alibaba</groupId>
    	<artifactId>fastjson</artifactId>
    	<version>1.2.8</version>
	</dependency>
	
	<!-- struts2 -->
	<dependency>
		<groupId>org.apache.struts</groupId>
		<artifactId>struts2-core</artifactId>
		<version>2.3.24.1</version>
	</dependency>
	<dependency>
		<groupId>org.apache.struts</groupId>
		<artifactId>struts2-convention-plugin</artifactId>
		<version>2.3.24.1</version>
	</dependency>
	<dependency>
		<groupId>org.apache.struts</groupId>
		<artifactId>struts2-spring-plugin</artifactId>
		<version>2.3.24.1</version>
	</dependency>
	
	<!-- shiro -->
    <dependency>  
        <groupId>commons-logging</groupId>  
        <artifactId>commons-logging</artifactId>  
        <version>1.1.3</version>  
    </dependency>  
	<dependency>  
        <groupId>org.apache.shiro</groupId>  
        <artifactId>shiro-core</artifactId>  
        <version>1.2.2</version>  
    </dependency>
    <dependency>  
    	<groupId>org.apache.shiro</groupId>  
    	<artifactId>shiro-web</artifactId>  
    	<version>1.2.2</version>  
	</dependency>  
	<dependency>
    	<groupId>org.apache.shiro</groupId>
    	<artifactId>shiro-spring</artifactId>
    	<version>1.2.2</version>
	</dependency>
    
    <!-- pinyin4j -->
    <dependency>
  		<groupId>com.belerweb</groupId>
  		<artifactId>pinyin4j</artifactId>
  		<version>2.5.0</version>
	</dependency>
	
	<!-- POI -->
	<dependency>
    	<groupId>org.apache.poi</groupId>
    	<artifactId>poi</artifactId>
    	<version>3.9</version>
	</dependency>
	
	<!-- jsoup -->
	<dependency>
	    <groupId>org.jsoup</groupId>
	    <artifactId>jsoup</artifactId>
	    <version>1.8.3</version>
	</dependency>
	
	<dependency>
    	<groupId>net.sf.flexjson</groupId>
    	<artifactId>flexjson</artifactId>
    	<version>2.1</version>
	</dependency>
	
	<!-- commons-lang -->
	<dependency>
    	<groupId>commons-lang</groupId>
    	<artifactId>commons-lang</artifactId>
    	<version>2.6</version>
	</dependency>
	
	<!-- JSTL -->
	<dependency>
	    <groupId>jstl</groupId>
	    <artifactId>jstl</artifactId>
	    <version>1.2</version>
	</dependency>
	<dependency>
	    <groupId>taglibs</groupId>
	    <artifactId>standard</artifactId>
	    <version>1.1.2</version>
	</dependency>
	
	
  </dependencies>
  
  <build>
    <finalName>iyw</finalName>
    <plugins>
	    <!-- FIX BUG, Dynamic Web Module 3.0 requires Java 1.6 or newer. -->
    	<plugin>
    		<groupId>org.apache.maven.plugins</groupId>
        	<artifactId>maven-compiler-plugin</artifactId>
        	<version>2.3.2</version>
        	<configuration>
          		<source>1.7</source>
          		<target>1.7</target>
        	</configuration>
      	</plugin>
     </plugins>
  </build>
  
</project>

特别需要注意一个细节问题,Spring和Spring Security的版本!之前没那么详细的看Spring Security的官方文档,项目抛出了异常,后来查阅官方文档才知道:

Spring Security builds against Spring Framework 4.3.2.RELEASE, but should work with 4.0.x. The problem that many users will have is that Spring Security’s transitive dependencies resolve Spring Framework 4.3.2.RELEASE which can cause strange classpath problems.

文档明确说明Spring Security违背了4.3.2.RELEASE,应该使用Spring Security4.0.x。

Spring Security需要在在web.xml中配置过滤器,DelegatingFilterProxy是一个特殊的Servler过滤器,它本身做的工作并不多,DelegatingFilterProxy只是委托给javax.Servlet.Filter的实现类,这个实现类必须注入在Spring的上下文中。其中,<filter-name>springSecurityFilterChain</filter-name>中的springSecurityFilterChain,并不是你定制的。Spring Security会自动创建SpringSecurityFilterChain,如果定制其他名称,很大可能(除非你偏偏有个类是SpringSecurityFilterChain,并且被Spring管理着)将无法找到过滤器。SpringSecurityFilterChain本身也是一个特殊的过滤器,可以理解为过滤器链,它可链接任意一个或多个过滤器。Spring Security依赖一系列Servlert过滤器提供不同的安全特性,不需要显示声明SpringSecurityFilterChain以及它所链接在一起的其她过滤器,但是它的前身ACEGI貌似是需要的,现在想想,感觉它的前身就是手柄也满是刺的狼牙棒。

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" version="3.0">
  <display-name>iyw</display-name>

  <!-- 设置默认页面 --> 
  <welcome-file-list>
    <welcome-file>/login/login.jsp</welcome-file>
  </welcome-file-list>
  
  <!-- 指定会话超时时间 -->
  <session-config>
	  <session-timeout>3</session-timeout>
  </session-config>
   
  <!-- 定义Spring监听器,加载Spring -->
  <listener>
     <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
  </listener>
  <listener>
      <listener-class>org.springframework.web.context.request.RequestContextListener</listener-class>
  </listener>
  
  <!-- Spring 刷新Introspector防止内存泄露 -->
  <listener>
	  <listener-class>org.springframework.web.util.IntrospectorCleanupListener</listener-class>
  </listener>
  
  <!-- 指定Spring配置文件位置 -->
  <context-param>
      <param-name>contextConfigLocation</param-name>
      <param-value>classpath:spring/applicationContext.xml</param-value>
  </context-param>
  
  <!-- Shiro过滤器 -->
  <!-- <filter>
      <filter-name>shiroFilter</filter-name>
      <filter-class>org.springframework.web.filter.DelegatingFilterProxy</filter-class>
      <init-param>  
   		  该值缺省为false,表示生命周期由SpringApplicationContext管理,设置为true则表示由ServletContainer管理  
    	  <param-name>targetFilterLifecycle</param-name>  
          <param-value>true</param-value>  
      </init-param>
  </filter>
  <filter-mapping>
      <filter-name>shiroFilter</filter-name>
      <url-pattern>/*</url-pattern>
      <dispatcher>REQUEST</dispatcher> 
  </filter-mapping> -->
  
  <!-- Spring Security 过滤器 -->
  <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>
  
   
  <!-- 解决乱码 -->
  <filter> 
    <filter-name>encodingFilter</filter-name> 
    <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class> 
    <init-param> 
        <param-name>encoding</param-name> 
        <param-value>UTF-8</param-value> 
    </init-param> 
    <init-param> 
        <param-name>forceEncoding</param-name> 
        <param-value>true</param-value> 
    </init-param> 
  </filter> 
  <filter-mapping> 
    <filter-name>encodingFilter</filter-name> 
    <url-pattern>/*</url-pattern> 
  </filter-mapping> 
  
  <!-- struts2的核心过滤器 -->
  <filter>
	<filter-name>struts2</filter-name>
	<!-- <filter-class>org.apache.struts2.dispatcher.filter.StrutsPrepareAndExecuteFilter</filter-class> -->
	<filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>
	<init-param>
		<param-name>config</param-name>
		<param-value>struts2/struts-default.xml,struts2/struts2.xml</param-value>
	</init-param>
  </filter>
  <filter-mapping>
	<filter-name>struts2</filter-name>
	<url-pattern>/*</url-pattern>
	<dispatcher>REQUEST</dispatcher>
	<dispatcher>FORWARD</dispatcher>
  </filter-mapping>
  
  <!-- 配置Spring MVC -->
  <servlet> 
      <servlet-name>dispatcherServlet</servlet-name>
      <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
      <init-param>
        <param-name>contextConfigLocation</param-name>
        <param-value>classpath:spring/mvcContext.xml</param-value>
    </init-param>
  </servlet>
  <servlet-mapping>
      <servlet-name>dispatcherServlet</servlet-name>
      <url-pattern>*.do</url-pattern>
  </servlet-mapping>
   
</web-app>

作为最优秀的框架之一的Spring,它的强大,我就不献媚几句了。粘贴出Spring的配置文件,供大家阅读。

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:mvc="http://www.springframework.org/schema/mvc"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns:context="http://www.springframework.org/schema/context"
    xsi:schemaLocation="http://www.springframework.org/schema/beans
        http://www.springframework.org/schema/beans/spring-beans.xsd
        http://www.springframework.org/schema/mvc
        http://www.springframework.org/schema/mvc/spring-mvc.xsd
        http://www.springframework.org/schema/context
        http://www.springframework.org/schema/context/spring-context.xsd">
    <context:component-scan base-package="com.raze.*"></context:component-scan>
    <context:annotation-config/>
    <mvc:annotation-driven/>
    <mvc:default-servlet-handler/>
    
    <!-- <import resource="classpath:spring/springShiro.xml"/> -->
    <import resource="classpath:security/springSecurity.xml"/>
         
    <!-- 引入config.properties文件 --> 
    <bean class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
        <property name="locations" value="classpath:config.properties"/>
    </bean>
 
 	<!-- 配置数据源 -->
    <bean id="dataSource" destroy-method="close" class="org.apache.commons.dbcp.BasicDataSource">
        <property name="driverClassName" value="${jdbc.driverClassName}"/>
        <property name="url" value="${jdbc.url}"/>
        <property name="username" value="${jdbc.username}"/>
        <property name="password" value="${jdbc.password}"/>
    </bean>
     
    <!-- 配置SqlSessionFacotory -->
    <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
      <property name="configLocation" value="classpath:mybatis/mybatisConfig.xml"></property>
      <property name="dataSource" ref="dataSource" />
    </bean> 
    
    <!-- 配置SqlSession -->
    <bean id="sqlSession" class="org.mybatis.spring.SqlSessionTemplate">
    	<constructor-arg index="0" ref="sqlSessionFactory"></constructor-arg>
        <constructor-arg index="1" value="SIMPLE"></constructor-arg>
    </bean> 
     
</beans>

本博客主要谈论Spring Security,其配置不可少:

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
	xmlns:security="http://www.springframework.org/schema/security"
	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.xsd">
		
	<!-- 定义上下文返回的消息的国际化 -->  
	<bean id="messageSource" class="org.springframework.context.support.ReloadableResourceBundleMessageSource">  
	    <property name="basename" value="classpath:security/messages_zh_CN.properties"/>  
	</bean>
		
	<!-- 自动配置模式,拦截请求 -->
	<security:http auto-config="true" use-expressions="false">
		<!-- 配置不过滤静态资源 -->
		<security:intercept-url pattern="/**/*.css" access="IS_AUTHENTICATED_ANONYMOUSLY"/>
		<security:intercept-url pattern="/**/*.jpg" access="IS_AUTHENTICATED_ANONYMOUSLY"/>
		<security:intercept-url pattern="/**/*.png" access="IS_AUTHENTICATED_ANONYMOUSLY"/>
		<security:intercept-url pattern="/**/*.js" access="IS_AUTHENTICATED_ANONYMOUSLY"/>
		<security:intercept-url pattern="http://www.springframework.org/**" access="IS_AUTHENTICATED_ANONYMOUSLY"/>
		
		<!-- 自定义无权限访问页面 -->
		<security:access-denied-handler error-page="/springsecurity/denied.jsp"/>	
		
		<!-- 配置不过滤登录页面 -->
		<security:intercept-url pattern="/security/MyJsp.jsp" access="IS_AUTHENTICATED_ANONYMOUSLY"/>
		<security:form-login login-page="/security/MyJsp.jsp" default-target-url="/security/d.jsp" 
			authentication-failure-url="/security/MyJsp.jsp?error=1" login-processing-url="/login" 
			username-parameter="username" password-parameter="password"/>
		
		<security:custom-filter ref="myFilterSecurityInterceptor" before="FILTER_SECURITY_INTERCEPTOR" />
		<!-- <security:intercept-url pattern="/**" access="ROLE_ADMIN"/> -->
		
		<!-- 配置CSRF跨站请求伪造 -->
		<security:csrf disabled="false"/>
		
	</security:http>  
		
	<!-- 开启Spring Security3认证和授权日志 -->  
    <bean class="org.springframework.security.authentication.event.LoggerListener"/>  
    <bean class="org.springframework.security.access.event.LoggerListener"/>  
    
    <!-- 自定义filter -->
    <bean id="myFilterSecurityInterceptor" class="com.raze.security.MyFilterSecurityInterceptor">
       <property name="authenticationManager" ref="authenticationManager"></property>
       <property name="accessDecisionManager" ref="myAccessDecisionManager"></property>
    </bean>
    
	<!-- 认证管理器,实现用户认证的入口,主要实现UserDetailsService接口即可 -->
	<security:authentication-manager alias="authenticationManager">
	   <security:authentication-provider user-service-ref="myUserDetailsService"></security:authentication-provider>
	</security:authentication-manager>
	
	<!-- 认证管理器,直接暴露SQL,非常不推荐 -->
	<!-- <security:authentication-manager>
		<security:authentication-provider>
			<security:jdbc-user-service data-source-ref="dataSource" users-by-username-query="SELECT 
					USERNAME, PASSWORD, ISENABLE AS ENABLED 
				FROM  
					T_USER_INFO WHERE USERNAME = ? "
				authorities-by-username-query="SELECT
					M_B.USERNAME,
					M_C.ROLENAME AS AUTHORITY
				FROM
					R_USER_ROLE M_A
				LEFT JOIN T_USER_INFO M_B ON M_A.USERID = M_B. ID
				LEFT JOIN T_ROLE_INFO M_C ON M_A.ROLEID = M_C. ID
				WHERE
					M_B.USERNAME = ? "/>
		</security:authentication-provider>
	</security:authentication-manager> -->
	
</beans>

Sturts2的配置就简短的谈及,加入struts-default.xml,再引入定制Struts2的配置文件:

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

<!DOCTYPE struts PUBLIC
        "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
        "http://struts.apache.org/dtds/struts-2.0.dtd">
<struts>
    <constant name="struts.objectFactory" value="org.apache.struts2.spring.StrutsSpringObjectFactory"/>
    <constant name="struts.action.extension" value="do"></constant>
    <constant name="struts.multipart.maxSize" value="-1"></constant>
    <constant name="struts.enable.DynamicMethodInvocation" value="true" />

    <!-- 系统管理 -->
    <package name="system" extends="struts-default" namespace="/system">
    	<!-- 用户管理 -->
    	<action name="user_*" class="com.raze.controller.system.UserAction" method="{1}">
            <result name="index">/WEB-INF/jsp/system/index.jsp</result>
            <result name="login">/login/login.jsp</result>
        </action>
    </package>
    
</struts>

日志文件的配置:

<?xml version="1.0" encoding="UTF-8"?>
<configuration scan="true" scanPeriod="1 seconds" debug="false">
 
  <appender name="ConsoleAppender" class="ch.qos.logback.core.ConsoleAppender">
    <encoder>
      <pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern>
    </encoder>
  </appender>
   
  <appender name="FileAppender" class="ch.qos.logback.core.FileAppender">
      <file>E:/love.log</file>
    <encoder>
      <pattern>%d{HH:mm:ss} [%thread] %-5level %logger{36} - %msg%n</pattern>
    </encoder>
  </appender>
   
  <appender name="RollingFileAppender" class="ch.qos.logback.core.rolling.RollingFileAppender">
      <file>E:/detest.log</file>
    <rollingPolicy class="ch.qos.logback.core.rolling.FixedWindowRollingPolicy">
        <fileNamePattern>E:/love%i.log.zip</fileNamePattern>
        <minIndex>1</minIndex>
        <maxIndex>100</maxIndex>
    </rollingPolicy>
    <triggeringPolicy class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy">
        <maxFileSize>1MB</maxFileSize>
    </triggeringPolicy>
    <encoder>
      <pattern>%d{HH:mm:ss} [%thread] %-5level %logger{36} - %msg%n</pattern>
    </encoder>
  </appender>
   
  <root level="DEBUG">
    <appender-ref ref="ConsoleAppender" />
    <appender-ref ref="FileAppender" />
    <appender-ref ref="RollingFileAppender" />
  </root>
   
  <logger name="com.ibatis" level="DEBUG" />  
  <logger name="com.ibatis.common.jdbc.SimpleDataSource" level="DEBUG" />  
  <logger name="com.ibatis.common.jdbc.ScriptRunner" level="DEBUG" />  
  <logger name="com.ibatis.sqlmap.engine.impl.SqlMapClientDelegate" level="DEBUG" />  
  <logger name="java.sql.Connection" level="DEBUG" />  
  <logger name="java.sql.Statement" level="DEBUG" />  
  <logger name="java.sql.PreparedStatement" level="DEBUG" />  
   
</configuration>

数据库的配置文件:

#MYSQL
#jdbc.driverClassName=com.mysql.jdbc.Driver
#jdbc_read.host=121.41.9.67:3306
#jdbc_read.database=yunpay
#jdbc.url=jdbc:mysql://${jdbc_read.host}/${jdbc_read.database}?characterEncoding=utf-8&amp;autoReconnect=true&amp;autoReconnectForPools=true
#jdbc.username=root
#jdbc.password=Taoxiaoyin123

#ORACLE
jdbc.driverClassName=oracle.jdbc.OracleDriver
jdbc.url=jdbc:oracle:thin:@127.0.0.1:1521:ORCL
jdbc.username=SCOTT
jdbc.password=2654827818

MyBatis的配置文件:

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration
  PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
  "http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
  <typeAliases>
      <!-- <typeAlias type="com.raze.domain.TUserInfo" alias="SsqInfo"/> -->
  </typeAliases>
  <mappers>
    <!-- <mapper resource="mybatis/mapping/SsqInfo.ibt.xml"/> -->
    <mapper resource="mybatis/mapping/UserInfo.ibt.xml"/>
  </mappers>
</configuration>

定制的配置文件如下:

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="UserInfoNamespace">

  <resultMap id="UserInfoResult" type="com.raze.domain.UserInfo">
    <result column="ID" property="id"/>
    <result column="USERNAME" property="userName"/>
    <result column="PASSWORD" property="password"/>
    <result column="TELEPHONE" property="telephone"/>
    <result column="CREATETIME" property="createTime"/>
    <result column="UPDATETIME" property="updateTime"/>
    <result column="ISENABLE" property="isEnable"/>
  </resultMap>
 
  <select id="obtainList" resultMap="UserInfoResult">
  	SELECT * FROM T_USER_INFO
  </select>
   
  <insert id="insert" parameterType="com.raze.domain.UserInfo">
      INSERT INTO T_USER_INFO(USERNAME, PASSWORD, TELEPHONE, CREATETIME, UPDATETIME, ISENABLE) 
      VALUES(#{userName}, #{password}, #{telephone}, #{createTime}, #{updateTime}, #{isEnable})
  </insert>
   
  <update id="updateVipInfo" parameterType="com.raze.domain.UserInfo">
      UPDATE T_USER_INFO set USERNAME=#{userName},PASSWORD=#{password},TELEPHONE=#{telephone},CREATETIM=#{CREATETIME},
      	UPDATETIME=#{updateTime},ISENABLE=#{ISENABLE} where id=#{id}
  </update>
   
  <delete id="deleteVipInfo" parameterType="long">
      DELETE FROM T_USER_INFO WHERE ID=#{id}
  </delete>
   
  <select id="selectVipInfo" parameterType="string" resultType="map">
      SELECT * FROM T_USER_INFO WHERE USERNAME=#{userName}
  </select>

  <select id="obtainAuthorityCollentionByUserName" parameterType="string" resultType="map">
  	  SELECT
		M_B.USERNAME,
		M_C.ROLENAME
	  FROM
		R_USER_ROLE M_A
	  LEFT JOIN T_USER_INFO M_B ON M_A.USERID = M_B. ID
	  LEFT JOIN T_ROLE_INFO M_C ON M_A.ROLEID = M_C. ID
	  WHERE
		M_B.USERNAME = #{username}
  </select>
  
  <select id="obtainUserInfoByUserName" parameterType="string" resultMap="UserInfoResult">
  	  SELECT 
		* 
	  FROM  
		T_USER_INFO WHERE USERNAME = #{username} 
  </select>
  
  <select id="obtainAllAuthority" resultType="map">
  	SELECT
		M_B.INTERCEPTURL,
		M_C.ROLENAME
	FROM
		R_ROLE_AUTHORITY M_A
	LEFT JOIN T_AUTHORITY_INFO M_B ON M_A.AUTHORITYID = M_B. ID
	LEFT JOIN T_ROLE_INFO M_C ON M_A.ROLEID = M_C. ID
  </select>
   
</mapper>

 

转载于:https://my.oschina.net/dengjianming/blog/761045

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值