脚本宝典收集整理的这篇文章主要介绍了ssm整合--免登录功能,脚本宝典觉得挺不错的,现在分享给大家,也给大家做个参考。
/*
* 10天免登录操作
* 第一部分业务:在登录的时候操作,login.do
* 1.用户登录,勾选10天免登录
* i.给复选框一个标识,将标识传递到后台
* ii.后台接收到标识后,开始进行免登录操作
* 2.将用户名和密码存入cookie中(传统项目可以,金融/电商不允许这样操作)
* 安全问题?
* i.拦截器会拦截其他请求,只放行了登录请求和跳转到登录页面的请求
* ii.由于在我们输入密码以后,会对密码进行MD5加密操作,
* 故存入cookie中的数据都是加密后的数据,即使加密后的数据泄漏,也无法登录,
* 因为在登录时会对密码再次加密,二次加密后的密码,与数据库中的密码无法对应
* 3.设置cookie的一些属性:
* i.cookie过期时间:60*60*24*10 10天
* ii.cookie的存放路径:/ 根目录下,保证在任意路径下都能访问到cookie中的数据
*
* 第二部分业务:对跳转到登录页面的请求进行操作,toLogin.do
* 4.获取cookie中的用户名和密码
* 5.自动进行登录
* 调用service.login()方法进行登录
* 6.将自动登录后的用户存入session中
*
*/
拦截器
在web.xml中配置
<!--
欢迎页面
当访问http://127.0.0.1:8080/crm时,会自动找到index.jsp
-->
<welcome-file-list>
<welcome-file>/index.jsp</welcome-file>
</welcome-file-list>
在index.jsp中配置
<!--跳转到登录页面-->
<script type="text/javascript">
document.location.href = "settings/user/toLogin.do";
</script>
在applicationContext-web.xml中配置
<!--
权限控制的拦截器
-->
<mvc:interceptors>
<mvc:interceptor>
<!--对所有的请求都拦截-->
<mvc:mapping path="/**"/>
<!--对登录请求放行-->
<mvc:exclude-mapping path="/settings/user/login.do"/>
<!--对跳转到登录页面的请求放行-->
<mvc:exclude-mapping path="/settings/user/toLogin.do"/>
<!--注册的拦截器-->
<bean class="com.mryang.crm.interceptor.LoginInterceptor"/>
</mvc:interceptor>
</mvc:interceptors>
在拦截器中设置
public class LoginInterceptor implements HandlerInterceptor {
/**
* 控制器方法执行 之前 执行的方法
*/
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object o) throws Exception {
// 只有用户登录后才放行
User user = (User) request.getSession().getAttribute("user");
if (user == null){//用户未登录,抛出异常
// 异常处理器会帮我们重定向到登录页面
// InterceptorException():自定义异常
throw new InterceptorException();
}
return true;
}
/**
* 控制器方法执行 之后 执行的方法
*/
@Override
public void postHandle(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Object o, ModelAndView modelAndView) throws Exception {
}
/**
* 页面接在完成后执行的方法
*/
@Override
public void afterCompletion(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Object o, Exception e) throws Exception {
}
}
前端操作
给免登录复选框一个标识
复选框添加点击事件
//10天免登录操作
// 给复选框添加点击事件
$("#loginFlag").click(function () {
// 获取复选框状态
var flag = $("#loginFlag").prop("checked")
if (flag){//选中标记,并自定义标识值
$("#flag").val("select")
}else{//未选中
$("#flag").val("")
}
// alert($("#flag").val())
})
点击登录时获取标识信息
// 10天免登录标记
var flag = $("#flag").val()
// 使用ajax进行数据传递
后端操作
执行登录操作时,login.do
// 首先接收flag的值
// 其次只有在用户验证通过后才能进行此操作,否则写入cookie中的信息有可能是错误
if ("select".equals(flag)){
// 将用户名和密码存放到cookie中
Cookie loginActCookie = new Cookie("loginAct", loginAct);
// 密码要存入加密后的密码
Cookie loginPwdCookie = new Cookie("loginPwd", md5Pwd);
// cookie的相关参数
int editTime = 60*60*24*10;// 10天
// 设置cookie的过期时间
loginActCookie.setMaxAge(editTime);
loginActCookie.setPath("/");
loginPwdCookie.setMaxAge(editTime);
loginPwdCookie.setPath("/");
// 将cookie对象写回浏览器
response.addCookie(loginActCookie);
response.addCookie(loginPwdCookie);
}
跳转登录页面时,toLogin.do
// 获取cookie
Cookie[] cookies = request.getCookies();
// 将cookie中的值与用户名和密码进行对比
String loginAct=null;
String loginPwd=null;
for (Cookie cookie : cookies) {
if ("loginAct".equals(cookie.getName())){
// 获取到用户名称
loginAct = cookie.getValue();
// 结束本次循环
continue;
}
if ("loginPwd".equals(cookie.getName())){
loginPwd = cookie.getValue();
}
}
// 自动登录操作
if (loginAct != null && loginPwd != null) {// 获取到了用户名和密码
// 获取用户ip
String ip = request.getRemoteAddr();
// 执行自动登录
User autoLoginUser = userService.login(loginAct, loginPwd, ip);
if (autoLoginUser != null){// 登录成功
// 将user存储到session中
request.getSession().setAttribute("user", autoLoginUser);
// 如果登录成功,直接跳转到首页
return "redirect:/workbench/toIndex.do";
}
}
以上是脚本宝典为你收集整理的ssm整合--免登录功能全部内容,希望文章能够帮你解决ssm整合--免登录功能所遇到的问题。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。