1. 程式人生 > >在IntelliJ IDEA上搭建Spring+SpringMVC+Mybatis+Shiro環境搭建(一)

在IntelliJ IDEA上搭建Spring+SpringMVC+Mybatis+Shiro環境搭建(一)

IntelliJ IDEA 下載地址:http://www.jetbrains.com/idea/ 都是最新版本的,只要破解一個版本,其他版本可以共用,具體參考百度O(∩_∩)O

Maven Reposity Maven倉庫地址:http://mvnrepository.com/

在IDEA上新建一個Project ,然後選擇Maven,最後選擇webapp


   圖1.1

第二頁填maven專案的資訊


圖1.2


圖1.3

工程建立完成之後,要注意檔案結構


圖1.4

工程目錄建立完成之後,要建立工程的環境設定


圖1.5

在modules中設定web.xml路徑


圖1.6

下面去pom.xml中新增jar包

<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">
<!--Maven座標-->
<modelVersion>4.0.0</modelVersion>
  <groupId>com.alec</groupId>
  <artifactId>
pm</artifactId> <packaging>war</packaging> <version>1.0-SNAPSHOT</version> <name>pm Maven Webapp</name> <!--引數--> <properties> <project.bulid.sourceEncoding>UTF-8</project.bulid.sourceEncoding> <springframework.version>
4.2.4.RELEASE</springframework.version> </properties> <url>http://maven.apache.org</url> <!--依賴jar--> <dependencies> <!--junit--> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.12</version> <scope>test</scope> </dependency> <!--servlet api--> <dependency> <groupId>javax.servlet</groupId> <artifactId>javax.servlet-api</artifactId> <version>3.1.0</version> </dependency> <!--servlet jstl--> <dependency> <groupId>javax.servlet</groupId> <artifactId>jstl</artifactId> <version>1.2</version> </dependency> <!--springMvcjar--> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-context</artifactId> <version>${springframework.version}</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-test</artifactId> <version>${springframework.version}</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-context-support</artifactId> <version>${springframework.version}</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-webmvc</artifactId> <version>${springframework.version}</version> <type>jar</type> <scope>compile</scope> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-jdbc</artifactId> <version>${springframework.version}</version> <type>jar</type> <scope>compile</scope> </dependency> <!--Mybatis--> <dependency> <groupId>org.mybatis</groupId> <artifactId>mybatis</artifactId> <version>3.3.0</version> </dependency> <!--JSR驗證框架--> <dependency> <groupId>org.hibernate</groupId> <artifactId>hibernate-validator</artifactId> <version>5.2.2.Final</version> </dependency> <!--mybatisSpring整合--> <dependency> <groupId>org.mybatis</groupId> <artifactId>mybatis-spring</artifactId> <version>1.2.3</version> </dependency> <!--pageHelper分頁--> <dependency> <groupId>com.github.pagehelper</groupId> <artifactId>pagehelper</artifactId> <version>3.3.2</version> </dependency> <!--資料庫連線池--> <dependency> <groupId>com.alibaba</groupId> <artifactId>druid</artifactId> <version>1.0.16</version> </dependency> <!--mysql驅動--> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>5.1.25</version> <scope>runtime</scope> </dependency> <!--shiro--> <dependency> <groupId>org.apache.shiro</groupId> <artifactId>shiro-core</artifactId> <version>1.2.4</version> </dependency> <dependency> <groupId>org.apache.shiro</groupId> <artifactId>shiro-web</artifactId> <version>1.2.4</version> </dependency> <dependency> <groupId>org.apache.shiro</groupId> <artifactId>shiro-spring</artifactId> <version>1.2.4</version> </dependency> <dependency> <groupId>org.apache.shiro</groupId> <artifactId>shiro-ehcache</artifactId> <version>1.2.4</version> </dependency> <dependency> <groupId>org.apache.shiro</groupId> <artifactId>shiro-quartz</artifactId> <version>1.2.4</version> </dependency> <!--mongodb--> <dependency> <groupId>org.mongodb</groupId> <artifactId>mongo-java-driver</artifactId> <version>3.2.0</version> </dependency> <!--log4jslf4整合--> <dependency> <groupId>log4j</groupId> <artifactId>log4j</artifactId> <version>1.2.17</version> </dependency> <dependency> <groupId>org.slf4j</groupId> <artifactId>slf4j-log4j12</artifactId> <version>1.7.5</version> </dependency> <dependency> <groupId>org.slf4j</groupId> <artifactId>slf4j-api</artifactId> <version>1.7.5</version> </dependency> </dependencies> <build> <resources> <!--資原始檔路徑--> <resource> <directory>src/main/java</directory> <includes> <include>**/*.xml</include> </includes> </resource> <resource> <directory>src/main/resources</directory> <includes> <include>**/*.*</include> </includes> </resource> </resources> <plugins> <plugin> <!--maven指定java編譯環境--> <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> <encoding>${project.bulid.sourceEncoding}</encoding> </configuration> </plugin> <plugin> <!--mybatis反向生成工具--> <groupId>org.mybatis.generator</groupId> <artifactId>mybatis-generator-maven-plugin</artifactId> <version>1.3.2</version> <configuration> <configurationFile>src/main/resources/generatorConfig.xml</configurationFile> <verbose>true</verbose> <overwrite>true</overwrite> </configuration> <executions> <execution> <goals> <goal>generate</goal> </goals> </execution> </executions> <dependencies> <dependency> <groupId>org.mybatis.generator</groupId> <artifactId>mybatis-generator-core</artifactId> <version>1.3.2</version> </dependency> </dependencies> </plugin> </plugins> </build> </project>

這是pom裡面需要匯入的jar和各種資訊

配置Tomcat


圖1,7


圖1.8

剩下的事,就是很常規的做SSM的整合,可以參考 http://blog.csdn.net/u011403655/article/details/46843331

做完SSM整合之後需要進一步整合Shiro

Shiro整合一,在pom..xml檔案中加入shiro-core,shiro-spring,shiro-web,shiro-ehcach,shiro-quartz的依賴

Shiro整合二,建立spring-shiro.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:p="http://www.springframework.org/schema/p"
xmlns:mvc="http://www.springframework.org/schema/mvc"
xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="http://www.springframework.org/schema/beans
      http://www.springframework.org/schema/beans/spring-beans-3.1.xsd
      http://www.springframework.org/schema/mvc
      http://www.springframework.org/schema/mvc/spring-mvc-3.1.xsd
      http://www.springframework.org/schema/context
      http://www.springframework.org/schema/context/spring-context-3.1.xsd">
<!-- 載入配置檔案 -->
<context:property-placeholder location="classpath*:config.properties"/>
<!-- Shiro許可權過濾URL定義 -->
<bean name="shiroFilterChainDefinitions" class="java.lang.String">
              <constructor-arg>
                     <value>
/static/** = anon
                            /login = authc
                            /logout = logout
                            /** = user
                     </value>
              </constructor-arg>
       </bean>
<!-- 安全認證過濾器 -->
<bean id="shiroFilter" class="org.apache.shiro.spring.web.ShiroFilterFactoryBean">
        <property name="securityManager" ref="securityManager" />
        <property name="loginUrl" value="/login" />
        <property name="successUrl" value="/index" />
        <property name="filters">
            <map>
                <entry key="authc" value-ref="formAuthFilter"/>
            </map>
        </property>
        <property name="filterChainDefinitions">
            <ref bean="shiroFilterChainDefinitions"/>
        </property>
    </bean>
<!-- 定義Shiro安全管理配置 -->
<bean id="securityManager" class="org.apache.shiro.web.mgt.DefaultWebSecurityManager">
        <property name="realm" ref="userPassAuthRealm" />
        <property name="sessionManager" ref="sessionManager" />
        <property name="cacheManager" ref="shiroCacheManager" />
    </bean>
<!-- 自定義會話管理配置 -->
<bean id="sessionManager" class="org.apache.shiro.web.session.mgt.DefaultWebSessionManager">
        <property name="sessionDAO" ref="sessionDAO"/>
<!-- 會話超時時間,單位:毫秒  -->
<property name="globalSessionTimeout" value="180000"/>
<!-- 定時清理失效會話, 清理使用者直接關閉瀏覽器造成的孤立會話   -->
<property name="sessionValidationInterval" value="120000"/>
        <property name="sessionValidationSchedulerEnabled" value="true"/>
        <property name="sessionIdCookie" ref="sessionIdCookie"/>
        <property name="sessionIdCookieEnabled" value="true"/>
        <property name="deleteInvalidSessions" value="true"/>
        <property name="sessionValidationScheduler" ref="sessionValidationScheduler"/>
    </bean>
<!-- 會話驗證排程器 -->
<bean id="sessionValidationScheduler"
class="org.apache.shiro.session.mgt.quartz.QuartzSessionValidationScheduler">
        <property name="sessionValidationInterval" value="1800000"/>
        <property name="sessionManager" ref="sessionManager"/>
    </bean>
<!-- 指定本系統SESSIONID, 預設為: JSESSIONID 問題: SERVLET容器名衝突, JETTY, TOMCAT 等預設JSESSIONID,
當跳出SHIRO SERVLET時如ERROR-PAGE容器會為JSESSIONID重新分配值導致登入會話丟失! -->
<bean id="sessionIdCookie" class="org.apache.shiro.web.servlet.SimpleCookie">
        <constructor-arg name="name" value="alec.session.id"/>
    </bean>
<!-- 會話ID生成器 -->
<bean id="sessionIdGenerator"
class="org.apache.shiro.session.mgt.eis.JavaUuidSessionIdGenerator"/>
<!-- Session儲存容器 -->
<bean id="sessionDAO" class="org.apache.shiro.session.mgt.eis.EnterpriseCacheSessionDAO">
        <property name="sessionIdGenerator" ref="sessionIdGenerator" />
        <property name="cacheManager" ref="shiroCacheManager" />
    </bean>
<!-- 定義授權快取管理器 -->
<bean id="shiroCacheManager" class="org.apache.shiro.cache.ehcache.EhCacheManager">
        <property name="cacheManager" ref="ehCacheManager"/>
    </bean>
<!-- 保證實現了Shiro內部lifecycle函式的bean執行 -->
<bean id="lifecycleBeanPostProcessor" class="org.apache.shiro.spring.LifecycleBeanPostProcessor"/>
</beans>

Shiro整合三,在web.xml中配置

  1. <context-param>  
  2.     <param-name>contextConfigLocation</param-name>  
  3.     <param-value>  
  4.         classpath:spring-beans.xml,  
  5.         classpath:spring-shiro-web.xml  
  6.     </param-value>  
  7. </context-param>  
  8. <listener>  
  9.    <listener-class>  
  10. org.springframework.web.context.ContextLoaderListener  
  11. </listener-class>  
  12. </listener>

  1. <filter>  
  2.     <filter-name>shiroFilter</filter-name>  
  3.     <filter-class>org.springframework.web.filter.DelegatingFilterProxy</filter-class>  
  4.     <init-param>  
  5.         <param-name>targetFilterLifecycle</param-name>  
  6.         <param-value>true</param-value>  
  7.     </init-param>  
  8. </filter>  
  9. <filter-mapping>  
  10.     <filter-name>shiroFilter</filter-name>  
  11.     <url-pattern>/*</url-pattern>  
  12. </filter-mapping> 

Shiro整合三,EhCache配置

EhCache有兩種配法,

第一種

spring-shiro.xml的檔案裡直接配置

  1. <bean id="cacheManager" class="org.apache.shiro.cache.ehcache.EhCacheManager">  
  2.     <property name="cacheManagerConfigFile" value="classpath:ehcache.xml"/>  
  3. </bean>
第二種

spring-shiro.xml的檔案裡

<!-- 定義授權快取管理器 -->
<bean id="shiroCacheManager" class="org.apache.shiro.cache.ehcache.EhCacheManager">
    <property name="cacheManager" ref="ehCacheManager"/>
</bean>
然後在spring-core.xml或者spring-mybatis.xml中配置 ehCacheManager
<!-- 快取管理器 使用Ehcache實現 -->
<bean id="ehCacheManager" class="org.springframework.cache.ehcache.EhCacheManagerFactoryBean">
    <property name="configLocation" value="classpath:cache/ehcache.xml"/>
</bean>

配置完成!

可以寫一個Controller來測試一下

@Controller

public class LoginController {
    @RequestMapping("/login")
    public String login()
    {

        return "sys/login";
}
}

前臺寫一個JSP,login,jsp

<%@page pageEncoding="utf-8" language="java" %>
<%@ include file="/WEB-INF/views/include/taglib.jsp"%>
<!DOCTYPE html>
<html>
<head>
   <title>許可權管理系統 登入</title>
<%@ include file="/WEB-INF/views/include/head.jsp"%>
   <style type="text/css">
html,body,table{background-color:#f5f5f5;width:100%;text-align:center;}
     .form-signin-heading{font-family:Helvetica, Georgia, Arial, sans-serif, 黑體;font-size:36px;margin-bottom:20px;color:#0663a2;}
      .form-signin{position:relative;text-align:left;width:300px;padding:25px 29px 29px;margin:0 auto 20px;background-color:#fff;border:1px solid #e5e5e5;
-webkit-border-radius:5px;-moz-border-radius:5px;border-radius:5px;-webkit-box-shadow:0 1px 2px rgba(0,0,0,.05);-moz-box-shadow:0 1px 2px rgba(0,0,0,.05);box-shadow:0 1px 2px rgba(0,0,0,.05);}
      .form-signin .checkbox{margin-bottom:10px;color:#0663a2;} .form-signin .input-label{font-size:16px;line-height:23px;color:#999;}
      .form-signin .input-block-level{font-size:16px;height:auto;margin-bottom:15px;padding:7px;*width:283px;*padding-bottom:0;_padding:7px 7px 9px 7px;}
      .form-signin .btn.btn-large{font-size:16px;} .form-signin #themeSwitch{position:absolute;right:15px;bottom:10px;}
      .form-signin div.validateCode {padding-bottom:15px;} .mid{vertical-align:middle;}
      .header{height:80px;padding-top:20px;} .alert{position:relative;width:300px;margin:0 auto;*padding-bottom:0px;}
      label.error{background:none;width:270px;font-weight:normal;color:inherit;margin:0;}
    </style>
   <script type="text/javascript">
$(document).ready(function() {
         $("#loginForm").validate({
            messages: {
               username: {required: "請填寫使用者名稱."}