Commit 020a6f4a by cc150520900118

增加超时登录认证功能

parent c96c7f58
......@@ -11,6 +11,34 @@
<spring.version>4.2.6.RELEASE</spring.version>
<mybatis.version>3.4.1</mybatis.version>
</properties>
<!-- 公司的maven仓库 -->
<repositories>
<repository>
<id>founder</id>
<url>http://47.92.108.28:8081/nexus/content/groups/public/</url>
<releases>
<enabled>true</enabled>
</releases>
<snapshots>
<enabled>true</enabled>
</snapshots>
</repository>
</repositories>
<!-- 指定maven plugin仓库 -->
<pluginRepositories>
<!-- 公司的maven plugin仓库 -->
<pluginRepository>
<id>founder</id>
<url>http://47.92.108.28:8081/nexus/content/groups/public/</url>
<releases>
<enabled>true</enabled>
</releases>
<snapshots>
<enabled>true</enabled>
</snapshots>
</pluginRepository>
</pluginRepositories>
<dependencies>
<dependency>
<groupId>org.springframework</groupId>
......
package com.cc.HandlerInterceptor;
import org.springframework.web.servlet.HandlerInterceptor;
import org.springframework.web.servlet.ModelAndView;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
/**
* Created by changchao on 2020/3/11.
*/
public class SystemSessionInterceptor implements HandlerInterceptor {
private static final String LOGIN_URL = "/relogin.jsp";
@Override
public void postHandle(HttpServletRequest request,
HttpServletResponse response, Object handler,
ModelAndView modelAndView) throws Exception {
}
@Override
public void afterCompletion(HttpServletRequest request,
HttpServletResponse response, Object handler, Exception ex)
throws Exception {
}
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response,
Object handler) throws Exception {
//不是ajax请求,则直接跳转页面
HttpSession session = request.getSession(true);
//session中获取用户名信息
Object obj = session.getAttribute("user");
if (obj == null || "".equals(obj.toString())) {
//如果判断是 AJAX 请求,直接设置为session超时
if(request.getHeader("x-requested-with")!=null && request.getHeader("x-requested-with").equalsIgnoreCase("XMLHttpRequest")){
//是ajax请求,则返回个消息给前台
response.setHeader("sessionstatus", "timeout");
}else{
//不是ajax请求,则直接跳转页面
//超时登录
response.sendRedirect(request.getSession().getServletContext().getContextPath() + LOGIN_URL);
return false;
}
}
return true;
}
}
\ No newline at end of file
package com.cc.controller;
import com.cc.model.Drsconfig;
import com.cc.db.InfoDao;
import com.cc.framework.WordsTpye;
import com.cc.model.Drsconfig;
import com.cc.model.User;
import com.cc.service.GasjzyfwService;
import com.cc.service.LoginService;
......@@ -10,9 +10,13 @@ import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.ModelMap;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;
import sun.misc.BASE64Encoder;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.util.HashMap;
......@@ -116,4 +120,39 @@ public class LoginController {
}
return returnMap;
}
//调用登录后台 返回resultlogin页面,登录成功即自动关闭;
@RequestMapping(value="/relogin",method = {RequestMethod.POST, RequestMethod.GET})
public String retoHome(HttpServletRequest request, @RequestParam("username") String username, @RequestParam("password") String password,ModelMap map){
//Map<String,Object> returnMap=new HashMap<>();
User user=null;
user=(User)request.getSession().getAttribute("user");
if(user==null){//进行登录
try {
User yuser=loginService.queryUserByUsername(username);
if(yuser!=null){
BASE64Encoder encoder = new BASE64Encoder();
String ypassword=encoder.encode(password.getBytes());
if(ypassword.equals(yuser.getPassword())){
user=yuser;
}
}
} catch (Exception e) {
e.printStackTrace();
map.addAttribute("state","error");
map.addAttribute("msg","登录异常!");
return "resultlogin";
}
}
if(user!=null){
request.getSession().setAttribute("user",user);//登录成功生成session
String sid=request.getSession().getId();
map.addAttribute("state","success");
map.addAttribute("msg","登陆成功!");
map.addAttribute("sid",sid);
}else{
map.addAttribute("state","failed");
map.addAttribute("msg","用户名或密码错误!");
}
return "resultlogin";
}
}
......@@ -10,4 +10,5 @@ import org.springframework.stereotype.Component;
public interface LoginDao {
public User queryUserById(String id);
public User queryUserByUsername(String Username);
}
......@@ -8,5 +8,5 @@ import com.cc.model.User;
public interface LoginService {
public User getUserById(String id);
public User queryUserByUsername(String Username);
}
......@@ -21,4 +21,11 @@ public class LoginServiceImpl implements LoginService {
user=loginDao.queryUserById(id);
return user;
}
@Override
public User queryUserByUsername(String Username) {
User user=null;
user=loginDao.queryUserByUsername(Username);
return user;
}
}
......@@ -17,5 +17,19 @@
TQYHBZ as tqyhbz from SYS_USER where 1=1
and identitycard=#{id}
</select>
<select id="queryUserByUsername" resultType="com.cc.model.User" parameterType="string">
select UNITCODE as unitcode,
USERNAME as username,
TRUE_NAME as trueName,
IDENTITYCARD as identitycard,
PASSWORD as password,
SEX as sex,
BIRTHDAY as birthday,
TELEPHONE as telephone,
UNITNAME as unitname,
GRADE as grade,
POLICEMANID as policemanid,
TQYHBZ as tqyhbz from SYS_USER where 1=1
and username=#{username}
</select>
</mapper>
\ No newline at end of file
......@@ -14,9 +14,20 @@
<!-- 对转向页面的路径解析。prefix:前缀, suffix:后缀 -->
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="redirectContextRelative" value="true"></property>
<property name="prefix" value="/WEB-INF/views/"></property>
<property name="prefix" value="/"></property>
<property name="suffix" value=".jsp"></property>
</bean>
<mvc:default-servlet-handler/>
<mvc:annotation-driven/>
<!-- Session失效拦截 -->
<mvc:interceptors>
<!-- 定义拦截器 -->
<mvc:interceptor>
<!-- 匹配的是url路径, 如果不配置或/**,将拦截所有的Controller -->
<mvc:mapping path="/**" />
<!-- 不需要拦截的地址 -->
<mvc:exclude-mapping path="/relogin" />
<bean class="com.cc.HandlerInterceptor.SystemSessionInterceptor"></bean>
</mvc:interceptor>
</mvc:interceptors>
</beans>
\ No newline at end of file
......@@ -97,4 +97,7 @@
<listener>
<listener-class>org.springframework.web.util.Log4jConfigListener</listener-class>
</listener>
<session-config>
<session-timeout>1</session-timeout>
</session-config>
</web-app>
......@@ -43,8 +43,10 @@
<script type="text/javascript" src="static/dy/js/guide_xq.js"></script>
<script type="text/javascript" src="static/layer/layer.js"></script>
<script type="text/javascript" src="static/rasc/js/ychy.js"></script>
<script type="text/javascript" src="static/js/ajax.js"></script>
<!--水印-->
<script src="static/js/watermark.js"></script>
<style>
.textbox .textbox-text {
height: 24px !important;
......
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>登陆界面</title>
</head>
<body>
<script type="text/javascript" src="static/js/ajax.js"></script>
<form action="/relogin" method="post">
username:<input type="text" name="username"><br /> Password:<input
type="password" name="password"><br /> <input type="submit"
value="登陆">
</form>
</body>
</html>
\ No newline at end of file
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>登录结果</title>
</head>
<body>
<span id="time">登录状态:"${state}"</span><br>
<script type="text/javascript" src="static/easyui-window/js/jquery-1.11.3.js"></script>
<script type="text/javascript">
//定义函数myClose关闭当前窗口
function myClose(){
//将id为time的元素的内容转为整数,保存在变量n中
//var n=parseInt(time.innerHTML);
debugger;
var n=1;
n--;//将n-1
//如果n==0,关闭页面
//否则, 将n+秒钟后自动关闭,再保存回time的内容中
if(n>0){
time.innerHTML=n+"秒钟后自动关闭";
timer=setTimeout(myClose,1000);
}else{
window.location.href="about:blank";
window.close();
}
}
var timer=null;
//当页面加载后,启动周期性定时器,每个1秒执行myClose
window.onload=function(){
var state = "${state}";
if(state=="success"){
debugger;
timer=setTimeout(myClose,1000);
}
}
</script>
</body>
</html>
\ No newline at end of file
/**
* 设置未来(全局)的AJAX请求默认选项
* 主要设置了AJAX请求遇到Session过期的情况
*/
$.ajaxSetup({
type: 'POST',
complete: function(xhr,status) {
var sessionStatus = xhr.getResponseHeader('sessionstatus');
if(sessionStatus == 'timeout') {
//var top = getTopWinow();
//var tempwindow=window.open('_blank');
var yes = confirm('由于您长时间没有操作, session已过期, 请重新登录.');
if (yes) {
//tempwindow.location.href = '/relogin.jsp';
openWin( '/relogin.jsp','用户登录', '8.5','7.5');
}
}
}
});
/**
* 在页面中任何嵌套层次的窗口中获取顶层窗口
* @return 当前页面的顶层窗口对象
*/
function getTopWinow(){
var p = window;
while(p != p.parent){
p = p.parent;
}
return p;
}
//name 弹窗名字
//width 弹窗宽度(比例)
//height 弹窗高度(比例)
var myWindow;
function openWin(url, name, width, height) {
debugger;
var w_percent = width ? width : 9;//如果参数未传,则取9
var h_percent = height ? height : 8;
var widths = (window.screen.availWidth) * w_percent / 10;
var heights = (window.screen.availHeight) * h_percent / 10;
var iLeft = (window.screen.availWidth - widths) / 2;
var iTop = (window.screen.availHeight - heights) / 2;
//判断是否为IE
var b_version=navigator.appVersion;
var version=b_version.split(";");
if(version[1]){
var trim_Version=version[1].replace(/[ ]/g,"");
}
if(trim_Version == 'MSIE9.0' || trim_Version == 'MSIE10.0'|| trim_Version == 'WOW64' || trim_Version == 'MSIE7.0'){//IE浏览器,直接打开
myWindow = window.open(url, name, 'scrollbars=yes,width=' + widths + ',height=' + heights + ',left=' + iLeft + ',top=' + iTop + '');
myWindow.focus();
}else{//非IE,判断窗口是否存在,若存在,则关闭当前窗口,重新打开
if(myWindow){
myWindow.close();
myWindow = null;
}
debugger;
myWindow = window.open(url, name, 'scrollbars=yes,width=' + widths + ',height=' + heights + ',left=' + iLeft + ',top=' + iTop + '');
}
//弹窗名字重命名ss
var title = name;
setTimeout(function () {
myWindow.document.title = title;
}, 1000);
}
\ No newline at end of file
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment