JavaEE權限管理系統的搭建(三)
本節介紹如何環境的搭建和配置:
首先要在父工程引入jar包依賴:
1 <!-- 通過屬性定義指定jar的版本 --> 2 <properties> 3 <spring.version>4.2.4.RELEASE</spring.version> 4 <hibernate.version>5.0.7.Final</hibernate.version> 5 <struts2.version>2.3.24</struts2.version> 6View Code<slf4j.version>1.6.6</slf4j.version> 7 <log4j.version>1.2.12</log4j.version> 8 <shiro.version>1.2.3</shiro.version> 9 <jackson.version>2.7.4</jackson.version> 10 <shiro.version>1.4.0</shiro.version> 11</properties> 12 13 <dependencies> 14 <dependency> 15 <groupId>org.springframework</groupId> 16 <artifactId>spring-context</artifactId> 17 <version>${spring.version}</version> 18 </dependency> 1920 <dependency> 21 <groupId>org.springframework</groupId> 22 <artifactId>spring-context-support</artifactId> 23 <version>${spring.version}</version> 24 </dependency> 25 26 <dependency> 27 <groupId>org.springframework</groupId> 28 <artifactId>spring-webmvc</artifactId> 29 <version>${spring.version}</version> 30 </dependency> 31 32 <dependency> 33 <groupId>org.springframework</groupId> 34 <artifactId>spring-web</artifactId> 35 <version>${spring.version}</version> 36 </dependency> 37 38 <dependency> 39 <groupId>org.springframework</groupId> 40 <artifactId>spring-orm</artifactId> 41 <version>${spring.version}</version> 42 </dependency> 43 44 <dependency> 45 <groupId>org.springframework</groupId> 46 <artifactId>spring-beans</artifactId> 47 <version>${spring.version}</version> 48 </dependency> 49 50 <dependency> 51 <groupId>org.springframework</groupId> 52 <artifactId>spring-core</artifactId> 53 <version>${spring.version}</version> 54 </dependency> 55 56 <dependency> 57 <groupId>org.mybatis</groupId> 58 <artifactId>mybatis</artifactId> 59 <version>3.3.0</version> 60 </dependency> 61 <dependency> 62 <groupId>org.mybatis</groupId> 63 <artifactId>mybatis-spring</artifactId> 64 <version>1.2.3</version> 65 </dependency> 66 67 <dependency> 68 <groupId>org.aspectj</groupId> 69 <artifactId>aspectjweaver</artifactId> 70 <version>1.7.4</version> 71 </dependency> 72 73 <!-- struts2 begin --> 74 <dependency> 75 <groupId>org.apache.struts</groupId> 76 <artifactId>struts2-core</artifactId> 77 <version>${struts2.version}</version> 78 <!-- 排除傳遞的依賴 --> 79 <exclusions> 80 <exclusion> 81 <artifactId>javassist</artifactId> 82 <groupId>javassist</groupId> 83 </exclusion> 84 </exclusions> 85 </dependency> 86 <dependency> 87 <groupId>org.apache.struts</groupId> 88 <artifactId>struts2-spring-plugin</artifactId> 89 <version>${struts2.version}</version> 90 </dependency> 91 <dependency> 92 <groupId>org.apache.struts</groupId> 93 <artifactId>struts2-convention-plugin</artifactId> 94 <version>${struts2.version}</version> 95 </dependency> 96 <!-- struts2 end --> 97 98 <!-- hibernate begin --> 99 <dependency> 100 <groupId>org.hibernate</groupId> 101 <artifactId>hibernate-core</artifactId> 102 <version>${hibernate.version}</version> 103 </dependency> 104 <!-- JSR-303 jar包 --> 105 <dependency> 106 <groupId>org.hibernate</groupId> 107 <artifactId>hibernate-validator</artifactId> 108 <version>5.1.3.Final</version> 109 </dependency> 110 <!-- hibernate end --> 111 112 <!-- log start --> 113 <dependency> 114 <groupId>log4j</groupId> 115 <artifactId>log4j</artifactId> 116 <version>${log4j.version}</version> 117 </dependency> 118 119 <dependency> 120 <groupId>org.slf4j</groupId> 121 <artifactId>slf4j-api</artifactId> 122 <version>${slf4j.version}</version> 123 </dependency> 124 125 <dependency> 126 <groupId>org.slf4j</groupId> 127 <artifactId>slf4j-log4j12</artifactId> 128 <version>${slf4j.version}</version> 129 </dependency> 130 <!-- log end --> 131 132 <dependency> 133 <groupId>org.apache.poi</groupId> 134 <artifactId>poi</artifactId> 135 <version>3.11</version> 136 </dependency> 137 138 <dependency> 139 <groupId>org.apache.cxf</groupId> 140 <artifactId>cxf-rt-frontend-jaxws</artifactId> 141 <version>3.0.1</version> 142 </dependency> 143 <dependency> 144 <groupId>org.apache.cxf</groupId> 145 <artifactId>cxf-rt-transports-http</artifactId> 146 <version>3.0.1</version> 147 </dependency> 148 <dependency> 149 <groupId>junit</groupId> 150 <artifactId>junit</artifactId> 151 <version>4.12</version> 152 <scope>test</scope> 153 </dependency> 154 155 <!-- 加入servlet和jsp的依賴 --> 156 <dependency> 157 <groupId>javax.servlet</groupId> 158 <artifactId>servlet-api</artifactId> 159 <version>2.5</version> 160 <scope>provided</scope> 161 </dependency> 162 <dependency> 163 <groupId>javax.servlet</groupId> 164 <artifactId>jsp-api</artifactId> 165 <version>2.0</version> 166 <scope>provided</scope> 167 </dependency> 168 169 <dependency> 170 <groupId>javax.servlet</groupId> 171 <artifactId>jstl</artifactId> 172 <version>1.2</version> 173 </dependency> 174 175 <!-- 引入fastjson的依賴 --> 176 <dependency> 177 <groupId>com.alibaba</groupId> 178 <artifactId>fastjson</artifactId> 179 <version>1.2.4</version> 180 </dependency> 181 182 <!--jackson依賴--> 183 <dependency> 184 <groupId>com.fasterxml.jackson.core</groupId> 185 <artifactId>jackson-databind</artifactId> 186 <version>${jackson.version}</version> 187 </dependency> 188 <dependency> 189 <groupId>com.fasterxml.jackson.core</groupId> 190 <artifactId>jackson-core</artifactId> 191 <version>${jackson.version}</version> 192 </dependency> 193 <dependency> 194 <groupId>com.fasterxml.jackson.core</groupId> 195 <artifactId>jackson-annotations</artifactId> 196 <version>${jackson.version}</version> 197 </dependency> 198 199 <!-- 引入pinyin4J的依賴 --> 200 <dependency> 201 <groupId>com.belerweb</groupId> 202 <artifactId>pinyin4j</artifactId> 203 <version>2.5.0</version> 204 </dependency> 205 206 <!--apache shiro jar包--> 207 <dependency> 208 <groupId>org.apache.shiro</groupId> 209 <artifactId>shiro-core</artifactId> 210 <version>${shiro.version}</version> 211 </dependency> 212 213 <!-- 引入json-lib的依賴 --> 214 <dependency> 215 <groupId>net.sf.json-lib</groupId> 216 <artifactId>json-lib</artifactId> 217 <version>2.4</version> 218 <classifier>jdk15</classifier> 219 </dependency> 220 221 <!-- 引入c3p0jar包 --> 222 <dependency> 223 <groupId>c3p0</groupId> 224 <artifactId>c3p0</artifactId> 225 <version>0.9.1.2</version> 226 </dependency> 227 228 <!-- 引入ehcache的依賴 --> 229 <dependency> 230 <groupId>net.sf.ehcache</groupId> 231 <artifactId>ehcache-core</artifactId> 232 <version>2.6.6</version> 233 </dependency> 234 <!-- 引入MySQL數據庫驅動依賴 --> 235 <dependency> 236 <groupId>mysql</groupId> 237 <artifactId>mysql-connector-java</artifactId> 238 <version>5.1.32</version> 239 </dependency> 240 <dependency> 241 <groupId>org.quartz-scheduler</groupId> 242 <artifactId>quartz</artifactId> 243 <version>2.2.3</version> 244 </dependency> 245 <dependency> 246 <groupId>org.quartz-scheduler</groupId> 247 <artifactId>quartz-jobs</artifactId> 248 <version>2.2.3</version> 249 </dependency> 250 <dependency> 251 <groupId>javax.mail</groupId> 252 <artifactId>mail</artifactId> 253 <version>1.4</version> 254 </dependency> 255 </dependencies> 256 257 <build> 258 <!-- 插件 --> 259 <plugins> 260 <plugin> 261 <groupId>org.apache.maven.plugins</groupId> 262 <artifactId>maven-resources-plugin</artifactId> 263 <version>2.5</version> 264 </plugin> 265 <plugin> 266 <groupId>org.apache.maven.plugins</groupId> 267 <artifactId>maven-compiler-plugin</artifactId> 268 <version>2.3.2</version> 269 <configuration> 270 <source>1.8</source> 271 <target>1.8</target> 272 </configuration> 273 </plugin> 274 <!-- 引入tomcat插件 --> 275 <plugin> 276 <groupId>org.apache.tomcat.maven</groupId> 277 <artifactId>tomcat7-maven-plugin</artifactId> 278 <version>2.2</version> 279 <configuration> 280 <path>/</path> 281 <port>8888</port> 282 </configuration> 283 </plugin> 284 </plugins> 285 <resources> 286 <resource> 287 <directory>src/main/java</directory> 288 <includes> 289 <include>**/*.properties</include> 290 <include>**/*.xml</include> 291 </includes> 292 <filtering>false</filtering> 293 </resource> 294 <resource> 295 <directory>src/main/resources</directory> 296 <includes> 297 <include>**/*.properties</include> 298 <include>**/*.xml</include> 299 </includes> 300 <filtering>false</filtering> 301 </resource> 302 </resources> 303 </build>
在子模塊中的web層中添加所需的配置,所需文件如下:
encrypt.properties
algorithmName=sha-256 hashIterations=5 isHex = false
很簡單,就三個屬性,這個是密碼加密配置文件,algorithmName算法名字,hashIterations散列次數,isHex:是否使用十六進制進行編碼,在這裏做配置,在類中會通過註解@Value的方式進行獲取其值。
jdbc.properties
driver=com.mysql.jdbc.Driver url=jdbc:mysql://localhost:3306/xx?useUnicode=true&characterEncoding=utf-8 username=xx password=xx
數據庫配置文件,這個就不用介紹了。
log4j.properties
log4j.rootLogger=info, stdout log4j.logger.org.mybatis = info log4j.appender.stdout=org.apache.log4j.ConsoleAppender log4j.appender.stdout.layout=org.apache.log4j.PatternLayout log4j.appender.stdout.layout.ConversionPattern=%5p %d %C: %m%n
日誌配置文件,輸出級別為info
mybatis-config.xml
<?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> <!--配置全局屬性--> <settings> <!--啟用緩存,默認值true--> <setting name="cacheEnabled" value="true"/> <!--啟用懶加載,全局開關,所有關聯的對象都會延遲加載,默認值false--> <setting name="lazyLoadingEnabled" value="true"/> <!--屬性啟用時,會使帶有延遲加載的屬性對象立即加載,反之,會按需加載,默認為true,這裏設置了false--> <setting name="aggressiveLazyLoading" value="false"/> <!--是否單一語句返回多結果集(需要兼容驅動),默認值true--> <setting name="multipleResultSetsEnabled" value="true"/> <!--使用列標簽代替列名,默認值true--> <setting name="useColumnLabel" value="true"/> <!--允許jdbc支持自動生成主鍵,默認值false--> <setting name="useGeneratedKeys" value="true"/> </settings> </configuration>
spring-dao.xml
<?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: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/context http://www.springframework.org/schema/context/spring-context.xsd"> <context:component-scan base-package="com.supin51.dao"/> <!--1.使用通配符掃描所有屬性文件,包含密碼加密、數據庫配置、日誌配置--> <context:property-placeholder location="classpath:*.properties"/> <!--2.配置數據庫相關參數及數據庫連接池--> <bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource"> <!--配置連接池屬性--> <property name="driverClass" value="${driver}" /> <!-- 基本屬性 url、user、password --> <property name="jdbcUrl" value="${url}" /> <property name="user" value="${username}" /> <property name="password" value="${password}" /> <!--c3p0私有屬性--> <property name="maxPoolSize" value="30"/> <property name="minPoolSize" value="10"/> <!--關閉連接後不自動commit--> <property name="autoCommitOnClose" value="false"/> <!--獲取連接超時時間--> <property name="checkoutTimeout" value="10000"/> <!--當獲取連接失敗重試次數--> <property name="acquireRetryAttempts" value="2"/> </bean> <!--3.配置SqlSessionFactory對象--> <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean"> <!--往下才是mybatis和spring真正整合的配置--> <!--註入數據庫連接池--> <property name="dataSource" ref="dataSource"/> <!--配置mybatis全局配置文件:mybatis-config.xml--> <property name="configLocation" value="classpath:mybatis-config.xml"/> <!--掃描entity包,使用別名,多個用;隔開--> <property name="typeAliasesPackage" value="com.supin51.domain"/> <!--掃描sql配置文件:mapper需要的xml文件--> <property name="mapperLocations" value="classpath*:com/supin51/mapper/*.xml"/> </bean> <!--4:配置掃描Dao接口包,動態實現DAO接口,註入到spring容器--> <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer"> <!--註入SqlSessionFactory--> <property name="sqlSessionFactoryBeanName" value="sqlSessionFactory"/> <!-- 給出需要掃描的Dao接口--> <property name="basePackage" value="com.supin51.dao"/> </bean> </beans>
spring-service.xml
<?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:context="http://www.springframework.org/schema/context" xmlns:tx="http://www.springframework.org/schema/tx" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx.xsd"> <!--掃描service包下所有使用註解的類型--> <context:component-scan base-package="com.supin51.service.impl"/> <!--配置事務管理器--> <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager"> <!--註入數據庫連接池--> <property name="dataSource" ref="dataSource"/> </bean> <!--配置基於註解的聲明式事務,默認使用註解來管理事務行為--> <tx:annotation-driven transaction-manager="transactionManager"/> </beans>
spring-mvc.xml
<?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:context="http://www.springframework.org/schema/context" xmlns:mvc="http://www.springframework.org/schema/mvc" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc.xsd"> <!--啟動包掃描功能,spring自動掃描base-package包下面的所有java類文件,則把這些類註冊為Spring的bean --> <context:component-scan base-package="com.supin51.admin.controller" /> <!-- 自動註冊處理映射器RequestMappingHandlerMapping 和處理器適配器RequestMappingHandlerAdapter, 這是springMvc為@controller分發請求必須註冊的驅動 --> <mvc:annotation-driven /> <!--使用默認的servlet來響應靜態文件 --> <mvc:default-servlet-handler /> <!--<!–靜態資源映射–>--> <!--<!–本項目把靜態資源放在了webapp的statics目錄下,資源映射如下–>--> <!--<mvc:resources mapping="/css/**" location="/statics/css/"/>--> <!--<mvc:resources mapping="/js/**" location="/statics/js/"/>--> <!--<mvc:resources mapping="/image/**" location="/statics/image/"/>--> <!--<mvc:resources mapping="/h-ui/**" location="/statics/h-ui/"/>--> <!--<mvc:resources mapping="/h-ui.admin/**" location="/statics/h-ui.admin/"/>--> <!--<mvc:resources mapping="/lib/**" location="/statics/lib/"/>--> <!--裝配文件上傳功能所需要的multipartResolver --> <bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver" > <!-- 最大文件上傳字節大小,10MB --> <property name="maxUploadSize"> <value>10485760</value> </property> <!-- 請求的編碼格式,默認為ISO-8859-1,必須和jsp頁面的pageEncoding一致,以便正確讀取表單 --> <property name="defaultEncoding"> <value>UTF-8</value> </property> </bean> <!--攔截器定義--> <mvc:interceptors> <!--登錄認證攔截器,--> <mvc:interceptor> <!--攔截所有請求--> <mvc:mapping path="/**"/> <!--使用bean自定義一個Interceptor--> <bean class="com.supin51.interceptor.AuthenticationInterceptor"/> </mvc:interceptor> <mvc:interceptor> <mvc:mapping path="/**/*.action"/> <mvc:mapping path="/**/*.action/*"/> <mvc:mapping path="/**/*.json"/> <bean class="com.supin51.interceptor.AuthorizationInterceptor"/> </mvc:interceptor> </mvc:interceptors> <!--視圖解析器,解析跳轉到/WEB-INF/views/下,spring4.0版本後可以直接忽略,不用配置此項 --> <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"> <!--前綴 --> <property name="prefix" value="/WEB-INF/views/" /> <!-- 後綴 --> <property name="suffix" value=".jsp" /> </bean> </beans>
最後就是webapp下的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"> <display-name>Archetype Created Web Application</display-name> <!--不攔截靜態資源文件--> <servlet-mapping> <servlet-name>default</servlet-name> <url-pattern>*.css</url-pattern> </servlet-mapping> <servlet-mapping> <servlet-name>default</servlet-name> <url-pattern>*.js</url-pattern> </servlet-mapping> <servlet-mapping> <servlet-name>default</servlet-name> <url-pattern>*.json</url-pattern> </servlet-mapping> <servlet-mapping> <servlet-name>default</servlet-name> <url-pattern>*.png</url-pattern> </servlet-mapping> <servlet-mapping> <servlet-name>default</servlet-name> <url-pattern>*.jpg</url-pattern> </servlet-mapping> <servlet-mapping> <servlet-name>default</servlet-name> <url-pattern>*.jpeg</url-pattern> </servlet-mapping> <servlet-mapping> <servlet-name>default</servlet-name> <url-pattern>*.gif</url-pattern> </servlet-mapping> <servlet-mapping> <servlet-name>default</servlet-name> <url-pattern>*.icon</url-pattern> </servlet-mapping> <servlet-mapping> <servlet-name>default</servlet-name> <url-pattern>*.ico</url-pattern> </servlet-mapping> <servlet-mapping> <servlet-name>default</servlet-name> <url-pattern>*.swf</url-pattern> </servlet-mapping> <servlet-mapping> <servlet-name>default</servlet-name> <url-pattern>*.eot</url-pattern> </servlet-mapping> <servlet-mapping> <servlet-name>default</servlet-name> <url-pattern>*.svg</url-pattern> </servlet-mapping> <servlet-mapping> <servlet-name>default</servlet-name> <url-pattern>*.ttf</url-pattern> </servlet-mapping> <servlet-mapping> <servlet-name>default</servlet-name> <url-pattern>*.woff</url-pattern> </servlet-mapping> <!-- Spring servlet --> <servlet> <servlet-name>springmvc</servlet-name> <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> <init-param> <param-name>contextConfigLocation</param-name> <param-value>classpath:spring-*.xml</param-value> </init-param> <load-on-startup>1</load-on-startup> </servlet> <servlet-mapping> <servlet-name>springmvc</servlet-name> <url-pattern>/</url-pattern> </servlet-mapping> <!-- 字符過濾器--> <filter> <filter-name>CharacterEncodingFilter</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> </filter> <filter-mapping> <filter-name>CharacterEncodingFilter</filter-name> <url-pattern>/*</url-pattern> </filter-mapping> <welcome-file-list> <welcome-file>/WEB-INF/views/login.jsp</welcome-file> </welcome-file-list> </web-app>
因為要使用Hui-admin前端框架,所以呢,也要把所需的靜態文件引入進來,在這裏我就不上傳了,請到Hui-admin官網下載,http://www.h-ui.net/index.shtml
我是新建了一個statics文件夾,然後把所需的文件放入進來的,我把所有的jsp文件都放入到了views文件夾下。
到這裏,整個項目的環境配置搭建,就結束了
運行tomcat看看是否能運行起來。我一般是開發時用maven運行,除非調試的時候,用tomcat調試,maven的好處是在編寫jsp文件時,改完後不需要重新運行項目,刷新即可看見效果。
另外一種運行方式,項目既然使用了maven,那肯定也得用maven來運行,之前在父項目的pom文件中已經加入了tomcat-maven的插件,回顧一下這段代碼,<path>/</path> /映射根路徑 ,這樣子,訪問時就直接:http://localhost:8888 <port>8888</port>,端口被配置成了8888
<!-- 插件 --> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-resources-plugin</artifactId> <version>2.5</version> </plugin> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-compiler-plugin</artifactId> <version>2.3.2</version> <configuration> <source>1.8</source> <target>1.8</target> </configuration> </plugin> <!-- 引入tomcat插件 --> <plugin> <groupId>org.apache.tomcat.maven</groupId> <artifactId>tomcat7-maven-plugin</artifactId> <version>2.2</version> <configuration> <path>/</path> <port>8888</port> </configuration> </plugin> </plugins>
右擊父項目,構建一下工程
然後進行maven install
最後點擊Web層的plugins中的tomcat7:run運行項目
本小節結束。下一節講解,權限的RBAC模型,數據庫文件關系。實現登錄認證還有加密
JavaEE權限管理系統的搭建(三)