記錄ssm session 分布式跨域 - redis方案

來源:互聯網
上載者:User

利用redis解決:

預設已安裝redis

引入jar包

compile group: 'org.springframework.session', name: 'spring-session-data-redis', version: '1.3.1.RELEASE'// https://mvnrepository.com/artifact/biz.paluch.redis/lettucecompile group: 'biz.paluch.redis', name: 'lettuce', version: '4.4.2.Final'

redis.properties

redis_hostName = localhostredis_port = 6379redis_password =redis_timeout = 3600redis.maxIdle=300redis.maxActive=600redis.maxWait=1000redis.testOnBorrow=true
spring.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/beanshttp://www.springframework.org/schema/beans/spring-beans-3.0.xsdhttp://www.springframework.org/schema/contexthttp://www.springframework.org/schema/context/spring-context-3.0.xsd"><!-- 註解支援 -->    <context:annotation-config />    <!-- 啟動組件掃描,排除@Controller組件,該組件由SpringMVC設定檔掃描  .service-->    <context:component-scan base-package="com.xping">        <context:exclude-filter type="annotation" expression="org.springframework.stereotype.Controller" />    </context:component-scan>    <!-- 引入屬性檔案(多個) -->    <bean id="propertyConfigurer" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">        <property name="locations">            <list>                <value>classpath:dbConfig.properties</value>                <value>classpath:redis.properties</value>            </list>        </property>    </bean>    <import resource="spring-mybatis.xml"/>    <import resource="spring-redis.xml"/>    <bean class="org.springframework.web.servlet.view.BeanNameViewResolver" /></beans>
spring-mvc.xml
<?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/mvchttp://www.springframework.org/schema/mvc/spring-mvc-3.2.xsdhttp://www.springframework.org/schema/beanshttp://www.springframework.org/schema/beans/spring-beans-3.2.xsdhttp://www.springframework.org/schema/contexthttp://www.springframework.org/schema/context/spring-context-3.2.xsd">    <!--開啟註解 -->    <mvc:annotation-driven/>    <!-- springmvc傳json值時的亂碼解決 -->    <mvc:annotation-driven>        <mvc:message-converters>            <bean class="org.springframework.http.converter.StringHttpMessageConverter">                <property name="supportedMediaTypes">                    <list>                        <value>application/json;charset=UTF-8</value>                    </list>                </property>            </bean>        </mvc:message-converters>    </mvc:annotation-driven>    <!-- 自動掃描controller包下的所有類,使其認為spring mvc的控制器 -->    <context:component-scan base-package="com.xping.controller"/>    <!-- 定義跳轉的檔案的前尾碼 ,視圖模式配置 -->    <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">        <!--路徑的首碼-->        <property name="prefix" value="/WEB-INF/views/"/>        <!--路徑的尾碼-->        <property name="suffix" value=".jsp"/>    </bean>    <!-- 檔案上傳配置 -->    <bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">        <!-- 預設編碼 -->        <property name="defaultEncoding" value="UTF-8"/>        <!-- 上傳檔案大小限制為31M,31*1024*1024 -->        <property name="maxUploadSize" value="32505856"/>        <!-- 記憶體中的最大值 -->        <property name="maxInMemorySize" value="4096"/>    </bean>    <!--日期格式轉換器-->    <bean id="conversionService" class="org.springframework.context.support.ConversionServiceFactoryBean">        <property name="converters">            <set>                <bean class="com.xping.utils.StringToDateConverter">                    <constructor-arg name="datePattern" value="yyyy-MM-dd"/>                </bean>            </set>        </property>    </bean>    <bean id="messageSource"          class="org.springframework.context.support.ResourceBundleMessageSource">        <property name="defaultEncoding" value="UTF-8"/>        <property name="useCodeAsDefaultMessage" value="true" />        <!-- 國際化資源檔名 -->        <property name="basenames">            <list>                <value>language.about</value>                <value>language.header</value>                <value>language.login</value>                <value>language.footer</value>                <value>language.page_404</value>                <value>language.home</value>            </list>        </property>    </bean>    <mvc:interceptors>        <!--<mvc:interceptor>-->        <!--<mvc:mapping path="/**"/>-->        <!--<bean class="com.xpingg.interceptor.CSRFInterceptor"/>-->        <!--</mvc:interceptor>-->        <!-- 國際化操作攔截器 如果採用基於(Session/Cookie)則必需配置 -->        <mvc:interceptor>            <mvc:mapping path="/**"/>            <bean class="org.springframework.web.servlet.i18n.LocaleChangeInterceptor"/>        </mvc:interceptor>        <mvc:interceptor>            <!-- 匹配的是url路徑, 如果不配置或/**,將攔截所有的Controller -->            <!--攔截go尾碼   不攔截py尾碼-->            <mvc:mapping path="/*.go" />            <!--資源不攔截-->            <!--<mvc:exclude-mapping path="/**/*login*"/>-->            <!--<mvc:exclude-mapping path="/**/*Login*"/>-->            <!-- /register 和 /login 不需要攔截-->            <!--<mvc:exclude-mapping path="/index.py" />-->            <bean class="com.xping.interceptor.LoginInterceptor">                <!--定義攔截後重新導向到預設的登入處理頁面 -->                <property name="defultLogin" value="/noAuth.py" />            </bean>        </mvc:interceptor>        <!-- 當設定多個攔截器時,先按順序調用preHandle方法,然後逆序調用每個攔截器的postHandle和afterCompletion方法 -->    </mvc:interceptors>    <!-- AcceptHeaderLocaleResolver 配置,因為AcceptHeaderLocaleResolver是預設語言地區解析器,不配置也可以 這裡我用我修改過的解析器 -->    <bean id="localeResolver" class="org.springframework.web.servlet.i18n.SessionLocaleResolver">        <property name="defaultLocale" value="zh_CN"/>    </bean>    <!--將靜態資源交由預設的servlet處理-->    <mvc:default-servlet-handler/>    <!--重要。將你的SwaggerConfig配置類注入-->    <bean class="com.xping.config.SwaggerConfig"/></beans>
spring-redis.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"       xsi:schemaLocation="http://www.springframework.org/schema/beans       http://www.springframework.org/schema/beans/spring-beans.xsd">    <!-- session設定 -->    <bean class="org.springframework.session.data.redis.config.annotation.web.http.RedisHttpSessionConfiguration">        <property name="maxInactiveIntervalInSeconds" value="3600"/>    </bean>    <!-- redis串連池 -->    <bean id="poolConfig" class="redis.clients.jedis.JedisPoolConfig">        <property name="maxIdle" value="${redis.maxIdle}" />        <property name="maxTotal" value="${redis.maxActive}" />        <property name="maxWaitMillis" value="${redis.maxWait}" />        <property name="testOnBorrow" value="${redis.testOnBorrow}" />    </bean>    <!-- redis串連工廠 -->    <bean id="connectionFactory" class="org.springframework.data.redis.connection.jedis.JedisConnectionFactory">        <property name="hostName" value="${redis_hostName}"/>        <property name="port" value="${redis_port}"/>        <property name="password" value="${redis_password}"/>        <property name="timeout" value="${redis_timeout}"/>        <property name="poolConfig" ref="poolConfig"/>    </bean>    <!--session-->    <bean class="org.springframework.data.redis.connection.lettuce.LettuceConnectionFactory"/>    <!-- 使用中間類解決RedisCache.jedisConnectionFactory的靜態注入,從而使MyBatis實現第三方緩衝 -->    <bean id="redisCacheTransfer" class="com.xping.utils.RedisCache.RedisCacheTransfer">        <property name="jedisConnectionFactory" ref="connectionFactory"/>    </bean>    <!--配置Redis字串運行環境-->    <bean id="stringRedisSerializer" class="org.springframework.data.redis.serializer.StringRedisSerializer"/>    <!--配置redisTemplate-->    <bean id="redisTemplate" class="org.springframework.data.redis.core.RedisTemplate">        <property name="connectionFactory" ref="connectionFactory"/>        <property name="keySerializer" ref="stringRedisSerializer"/>        <property name="valueSerializer" ref="stringRedisSerializer"/>    </bean></beans>
web.xml
<?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"         xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"         xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"         id="WebApp_ID" version="3.0">    <display-name>AoShop</display-name>    <servlet>        <servlet-name>DruidStatView</servlet-name>        <servlet-class>com.alibaba.druid.support.http.StatViewServlet</servlet-class>        <init-param>            <param-name>allow</param-name>            <param-value>127.0.0.1</param-value>        </init-param>        <init-param>            <param-name>deny</param-name>            <param-value>192.168.1.118</param-value>        </init-param>        <!-- 在StatViewSerlvet輸出的html頁面中,有一個功能是Reset All,執行這個操作之後,會導致所有計數器清零,重新計數 -->        <init-param>            <param-name>resetEnable</param-name>            <param-value>false</param-value>        </init-param>        <init-param>            <param-name>loginUsername</param-name>            <param-value>lmy</param-value>        </init-param>        <init-param>            <param-name>loginPassword</param-name>            <param-value>165177</param-value>        </init-param>    </servlet>    <servlet-mapping>        <servlet-name>DruidStatView</servlet-name>        <url-pattern>/druid/*</url-pattern>    </servlet-mapping>    <!-- Spring 服務層的設定檔 -->    <context-param>        <param-name>contextConfigLocation</param-name>        <param-value>classpath:spring.xml</param-value>    </context-param>    <!-- spring監聽器 -->    <listener>        <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>    </listener>    <!-- 防止spring記憶體溢出監聽器,比如quartz -->    <listener>        <listener-class>org.springframework.web.util.IntrospectorCleanupListener</listener-class>    </listener>    <!-- 前端控制器-->    <servlet>        <servlet-name>SpringMVC</servlet-name>        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>        <!--載入springmvc的配置問檔案-->        <init-param>            <param-name>contextConfigLocation</param-name>            <param-value>classpath:spring-mvc.xml</param-value>        </init-param>        <load-on-startup>1</load-on-startup>        <async-supported>true</async-supported>    </servlet>    <!--    第一種:*.action 以.action結尾的由DispatcherServlet進行解析    第二種:/所有訪問地址都由DispatcherServlet解析,對於靜態檔案的解析需要配置不讓DispatcherServlet解析。使用此種方式可以實現RESTful風格的url    第三種:/*,這樣配置不對,使用這種配置,最終要轉寄到一個jsp頁面時,仍然會由DispatcherServlet進行解析jsp地址,它不能根據jsp頁面找到Handler,會報錯-->    <servlet-mapping>        <servlet-name>SpringMVC</servlet-name>        <!-- 此處也可以配置成 *.do 形式 -->        <url-pattern>/</url-pattern>    </servlet-mapping>    <!-- 瀏覽器不支援put,delete等method,由該filter將/xxx?_method=delete轉換為標準的http delete方法 -->    <filter>        <filter-name>hiddenHttpMethodFilter</filter-name>        <filter-class>org.springframework.web.filter.HiddenHttpMethodFilter</filter-class>    </filter>    <filter-mapping>        <filter-name>hiddenHttpMethodFilter</filter-name>        <url-pattern>/*</url-pattern>    </filter-mapping>    <welcome-file-list>        <welcome-file>/index.jsp</welcome-file>    </welcome-file-list>    <!-- 配置Spring字元編碼過濾器 -->    <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>    <!--錯誤版面設定-->    <error-page>        <error-code>403</error-code>        <location>/WEB-INF/views/page_404.jsp</location>    </error-page>    <error-page>        <error-code>404</error-code>        <location>/WEB-INF/views/page_404.jsp</location>    </error-page>    <error-page>        <error-code>500</error-code>        <location>/WEB-INF/views/page_404.jsp</location>    </error-page>    <filter>        <filter-name>springSessionRepositoryFilter</filter-name>        <filter-class>org.springframework.web.filter.DelegatingFilterProxy</filter-class>    </filter>    <filter-mapping>        <filter-name>springSessionRepositoryFilter</filter-name>        <url-pattern>/*</url-pattern>        <dispatcher>REQUEST</dispatcher>        <dispatcher>ERROR</dispatcher>    </filter-mapping></web-app>



聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.