場景說明:java
我在給項目添加Druid 對Web 應用進行監控的時候發現登陸永遠調登陸頁面,Ajax 返回success也仍是沒法登陸,通過多方排查發現問題所在,本地開發環境是Win10-64系統單臺開發,不存在這樣的問題的,現網環境是兩臺服務器而後加負載均衡,聰明的同窗我想應該知道問題所在了,廢話很少說提槍上碼咯。web
第一步添加Jar 包(Maven-pom.xml) redis
<dependency> <groupId>org.springframework.session</groupId> <artifactId>spring-session-data-redis</artifactId> <version>1.0.1.RELEASE</version> </dependency> <dependency> <groupId>org.springframework.session</groupId> <artifactId>spring-session</artifactId> <version>1.0.1.RELEASE</version> </dependency> <dependency> <groupId>com.orange.redis-embedded</groupId> <artifactId>embedded-redis</artifactId> <version>0.6</version> </dependency>
第二步 添加攔截器(web.xml)spring
<!-- Spring Session 共享攔截 --> <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> </filter-mapping> <welcome-file-list> <welcome-file>/views/index.jsp</welcome-file> </welcome-file-list>
第三步 加入Spring 管理(applicationContext.xml)服務器
<!-- redis --> <bean id="jedisPoolConfig" class="redis.clients.jedis.JedisPoolConfig"> </bean> <bean id="jedisConnectionFactory" class="org.springframework.data.redis.connection.jedis.JedisConnectionFactory"> <property name="hostName" value="${redis.host}" /> <property name="port" value="${redis.port}" /> <!--<property name="password" value="${redis.pass}" />--> <property name="timeout" value="${redis.timeout}" /> <property name="poolConfig" ref="jedisPoolConfig" /> <property name="usePool" value="true" /> </bean> <bean id="redisTemplate" class="org.springframework.data.redis.core.StringRedisTemplate"> <property name="connectionFactory" ref="jedisConnectionFactory" /> </bean> <!-- 將session放入redis --> <bean id="redisHttpSessionConfiguration" class="org.springframework.session.data.redis.config.annotation.web.http.RedisHttpSessionConfiguration"> <property name="maxInactiveIntervalInSeconds" value="1800" /> </bean>
完成以上配置就實現了Redis 存儲Session 實現了Session共享功能。session
--------------------------------------------------------------華麗分割線--------------------------------------------------------------app
下面分享下 Druid 登陸自動跳登陸頁面的過程吧。負載均衡
首先樓主在網上各類查找各類搜看見人家說好了好多可是答案都不是那麼的明確,突然又一篇博客說了這樣的一句說他在登陸的時候返回 error 沒有登陸成功,這時我想我能夠跟HTTP 請求過去看看啊。而後開始跟HTTP 的過程。jsp
Network URL 跟蹤結果ui
submitLogin:http://localhost:8080/druid/submitLogin
有URL 好辦事了
開始看代碼了 web.xml 開始
com.alibaba.druid.support.http.StatViewServlet
ResourceServlet->service()方法中油這樣的一段代碼
if ("/submitLogin".equals(path)) { String usernameParam = request.getParameter(PARAM_NAME_USERNAME); String passwordParam = request.getParameter(PARAM_NAME_PASSWORD); if (username.equals(usernameParam) && password.equals(passwordParam)) { request.getSession().setAttribute(SESSION_USER_KEY, username); response.getWriter().print("success"); } else { response.getWriter().print("error"); } return; }
Druid 是經過Session 儲存用戶的,綜合上面的說明能夠簡單的出問題出在哪裏了。