全网整合营销服务商

电脑端+手机端+微信端=数据同步管理

免费咨询热线:400-708-3566

详解使用Spring3 实现用户登录以及权限认证

使用Spring3 实现用户登录以及权限认证

这里我就简单介绍一下,我在实现的时候处理的一些主要的实现。

1.用户登录

 <form action="loginAction.do" method="post"> 
  <div class="header"> 
  <h2 class="logo png"></h2> 
  </div> 
  <ul> 
        <li><label>用户名</label><input name="username" type="text" class="text"/></li> 
        <li/> 
        <li><label>密 码</label><input name="password" type="password" class="text" /></li>  
        <li/> 
        <li class="submits"> 
          <input class="submit" type="submit" value="登录" /> 
        </li> 
  </ul> 
  <div class="copyright">© 2013 - 2014 |</div> 
</form> 

以上是前台页面,后台的就是一个简单的逻辑实现:

    @RequestMapping(value="loginAction.do", method=RequestMethod.POST) 
public ModelAndView loginAction(@RequestParam(value="username") String username, @RequestParam(value="password") String password, HttpSession session, HttpServletResponse resp, @RequestParam(value="savetime", required=false) String savetime) { 
  session.removeAttribute(LogConstant.LOGIN_MESSAGE); 
  SystemUserDataBean user = userDao.getSystemUserByUserName(username); 
  ModelAndView view = null; 
  if(user == null) { 
    view = new ModelAndView(new RedirectView("login.html")); 
    session.setAttribute(LogConstant.LOGIN_MESSAGE, "用户名不正确"); 
    return view; 
  } 
  boolean isPasswordCorrect = EncryptionUtil.compareSHA(password, user.getPassword()); 
  if(isPasswordCorrect){ 
    session.setAttribute(LogConstant.CURRENT_USER, username); 
     
  } else{ 
    view = new ModelAndView(new RedirectView("login.html")); 
    session.setAttribute(LogConstant.LOGIN_MESSAGE, "密码不正确"); 
  } 
     
  return view; 
} 

2.登录信息

这里,在登录页面有一段JavaScript,来显示密码错误等信息:

<script type="text/javascript"> 
var login_username_info = '<%=request.getSession().getAttribute("currentUser") == null ? "" : request.getSession().getAttribute("currentUser")%>'; 
var login_message_info = '<%=request.getSession().getAttribute("login_message") == null ? "" : request.getSession().getAttribute("login_message")%>'; 
if(login_message_info != null && login_message_info != ''){ 
  alert(login_message_info); 
} 
 
</script> 

3.拦截未登录用户的请求

这里,从页面和后台实现了双重拦截:

页面代码如下:

<% 
if(session.getAttribute("currentUser")==null){ 
%> 
window.parent.location='login.html'; 
<% 
} 
%> 

后台是一个拦截器(servlet-config.xml):

<!-- 拦截器 -->  
  <mvc:interceptors>  
    <mvc:interceptor>  
      <mvc:mapping path="/*.do" />  
      <bean class="com..log.report.interceptor.AccessStatisticsIntceptor" />  
    </mvc:interceptor>  
  </mvc:interceptors>  

拦截器的实现是

import org.springframework.web.servlet.HandlerInterceptor; 
import org.springframework.web.servlet.ModelAndView; 
 
 
public class AccessStatisticsIntceptor implements HandlerInterceptor { 
@Override 
  public void afterCompletion(HttpServletRequest arg0, 
      HttpServletResponse arg1, Object arg2, Exception arg3) 
      throws Exception { 
    // TODO Auto-generated method stub 
 
  } 
 
  @Override 
  public void postHandle(HttpServletRequest arg0, HttpServletResponse arg1, 
      Object arg2, ModelAndView arg3) throws Exception { 
    // TODO Auto-generated method stub 
 
  } 
 
  @Override 
  public boolean preHandle(HttpServletRequest request, HttpServletResponse response, 
      Object obj) throws Exception { 
       
    String uri = request.getRequestURI().substring(request.getRequestURI().lastIndexOf("/") +1); 
    if(!AuthorityController.isAuthorized(uri, request.getSession())) { 
      //校验失败 
      return false; 
//     throw new CustomException(LogConstant.USER_NOT_LOGIN); 
    } 
      return true; 
 } 

具体如何校验的,会根据用户的权限,就不介绍了

4.返回未登录前访问的页面

首先在页面添加一段脚本,使用jQuery去访问后台

    var page = ""; 
var loc = decodeURIComponent(window.parent.location); 
var start = loc.indexOf("Log/") + 8; 
var end = loc.indexOf(".html"); 
page = loc.substr(start, end-start); 
if(page != null && page != '') { 
  alert(page); 
  $.ajax({ 
    type : "get", 
    url : "setPreviousPageAction.do?previousPage=" + page + ".html", 
    success : function(msg){   
 
    } 
  }); 
} 

然后,后台有记录这个页面:

@RequestMapping(value="setPreviousPageAction.do") 
public void setPreviousPageAction(@RequestParam(value="previousPage") String previousPage, HttpSession session){ 
  session.setAttribute(LogConstant.PREVIOUS_PAGE, previousPage); 
} 

在登录完成后,返回这个页面即可。

5.保存用户名密码

登录页面提供一个保存下拉框:

<select class="save_login" id="savetime" name="savetime"> 
  <option selected value="0">不保存</option> 
  <option value="1">保存一天</option> 
  <option value="2">保存一月</option> 
  <option value="3">保存一年</option> 
</select> 

后台在登录时会操作,将信息保存在cookie中:

if(savetime != null) { //保存用户在Cookie 
  int savetime_value = savetime != null ? Integer.valueOf(savetime) : 0; 
  int time = 0; 
  if(savetime_value == 1) { //记住一天 
    time = 60 * 60 * 24; 
  } else if(savetime_value == 2) { //记住一月 
    time = 60 * 60 * 24 * 30; 
  } else if(savetime_value == 2) { //记住一年 
    time = 60 * 60 * 24 * 365; 
  } 
  Cookie cid = new Cookie(LogConstant.LOG_USERNAME, username); 
  cid.setMaxAge(time); 
  Cookie cpwd = new Cookie(LogConstant.LOG_PASSWORD, password); 
  cpwd.setMaxAge(time); 
  resp.addCookie(cid); 
  resp.addCookie(cpwd); 
}  

前台在发现用户未登录时,会取出cookie中的数据去登录:

if(session.getAttribute("currentUser")==null){ 
  Cookie[] cookies = request.getCookies(); 
  String username = null; 
  String password = null; 
  for(Cookie cookie : cookies) { 
    if(cookie.getName().equals("log_username")) { 
      username = cookie.getValue(); 
    } else if(cookie.getName().equals("log_password")) { 
      password = cookie.getValue(); 
    } 
  } 
  if(username != null && password != null) { 
    %> 
    $.ajax({ 
      type : "post", 
      url : "loginByCookieAction.do", 
      data:"username=" + "<%=username%>"+ "&password=" + "<%=password%>", 
      success : function(msg){   
        if(msg.status == 'success') 
          window.parent.location.reload(); 
        else if(msg.status == 'failed') 
          gotoLoginPage(); 
      } 
    }); 
    <% 
  } else { 
    %> 
    gotoLoginPage(); 
    <% 
  } 
   
  ... 

以上就列出了我在解决登录相关问题的方法,代码有点长,就没有全部列出。


# spring  # 权限认证  # spring实现用户登录  # 用户登录  # SpringBoot整合SpringSecurity和JWT的示例  # Springboot+Shiro记录用户登录信息并获取当前登录用户信息的实现代码  # SpringMVC 实现用户登录实例代码  # springmvc+spring+mybatis实现用户登录功能(上)  # springmvc+spring+mybatis实现用户登录功能(下)  # 利用Spring IOC技术实现用户登录验证机制  # Spring mvc 实现用户登录的方法(拦截器)  # spring aop action中验证用户登录状态的实例代码  # Spring Cloud Gateway 使用JWT工具类做用户登录校验功能  # 使用Spring框架实现用户登录  # 我在  # 拦截器  # 不正确  # 是一个  # 我就  # 出了  # 就不  # 提供一个  # 介绍一下  # 不保存  # 实现了  # 下拉框  # 完成后  # removeAttribute  # false  # setAttribute  # EncryptionUtil  # getSystemUserByUserName  # isPasswordCorrect 


相关文章: 较简单的网站制作软件有哪些,手机版网页制作用什么软件?  企业在线网站设计制作流程,想建设一个属于自己的企业网站,该如何去做?  重庆网站制作公司哪家好,重庆中考招生办官方网站?  Avalonia如何实现跨窗口通信 Avalonia窗口间数据传递  如何用PHP快速搭建CMS系统?  广东专业制作网站有哪些,广东省能源集团有限公司官网?  南宁网站建设制作定制,南宁网站建设可以定制吗?  如何解决ASP生成WAP建站中文乱码问题?  山东网站制作公司有哪些,山东大源集团官网?  如何在Golang中指定模块版本_使用go.mod控制版本号  在线制作视频网站免费,都有哪些好的动漫网站?  详解jQuery停止动画——stop()方法的使用  C++中引用和指针有什么区别?(代码说明)  深圳防火门网站制作公司,深圳中天明防火门怎么编码?  如何选择建站程序?包含哪些必备功能与类型?  定制建站流程步骤详解:一站式方案设计与开发指南  潮流网站制作头像软件下载,适合母子的网名有哪些?  如何快速搭建支持数据库操作的智能建站平台?  专业型网站制作公司有哪些,我设计专业的,谁给推荐几个设计师兼职类的网站?  网站制作与设计教程,如何制作一个企业网站,建设网站的基本步骤有哪些?  青岛网站设计制作公司,查询青岛招聘信息的网站有哪些?  国美网站制作流程,国美电器蒸汽鍋怎么用官方网站?  制作销售网站教学视频,销售网站有哪些?  购物网站制作费用多少,开办网上购物网站,需要办理哪些手续?  成都品牌网站制作公司,成都营业执照年报网上怎么办理?  c# 在ASP.NET Core中管理和取消后台任务  香港网站服务器数量如何影响SEO优化效果?  如何快速重置建站主机并恢复默认配置?  独立制作一个网站多少钱,建立网站需要花多少钱?  如何在阿里云虚拟机上搭建网站?步骤解析与避坑指南  如何在阿里云服务器自主搭建网站?  C++如何使用std::optional?(处理可选值)  怎么制作一个起泡网,水泡粪全漏粪育肥舍冬季氨气超过25ppm,可以有哪些措施降低舍内氨气水平?  如何快速辨别茅台真假?关键步骤解析  香港服务器选型指南:免备案配置与高效建站方案解析  如何零基础在云服务器搭建WordPress站点?  宝塔建站无法访问?如何排查配置与端口问题?  logo在线制作免费网站在线制作好吗,DW网页制作时,如何在网页标题前加上logo?  七夕网站制作视频,七夕大促活动怎么报名?  如何访问已购建站主机并解决登录问题?  黑客如何通过漏洞一步步攻陷网站服务器?  如何通过FTP服务器快速搭建网站?  网站制作服务平台,有什么网站可以发布本地服务信息?  电商网站制作多少钱一个,电子商务公司的网站制作费用计入什么科目?  济南网站制作的价格,历城一职专官方网站?  建站之星后台密码遗忘?如何快速找回?  沈阳制作网站公司排名,沈阳装饰协会官方网站?  测试制作网站有哪些,测试性取向的权威测试或者网站?  ,想在网上投简历,哪几个网站比较好?  JS中使用new Date(str)创建时间对象不兼容firefox和ie的解决方法(两种) 

您的项目需求

*请认真填写需求信息,我们会在24小时内与您取得联系。