Spring+MyBatis实践——登录与权限控制
1、实现用户登录功能;
通过session来实现用户登录功能。在用户登录时,将用户的相关信息放在HttpSession对象用,其中HttpSession对象可以通过HttpServletRequest的getSession方法获得。同时,HttpSession对象对应Jsp内置对象session,在jsp页面中也可以通过session来访问,如通过jstl标签库来访问session中的内容:
<c:if test="${sessionScope.username == null}"> <p class="navbar-text navbar-right"> <a href="./getLoginPage" class="navbar-link">登录</a></p> </c:if>
通过判断session中的username是否为null,来决定是否显示标签p。
登录功能实现代码;
@RequestMapping(value="/login", method=RequestMethod.POST) public String login(HttpServletRequest request, User user){ if(userService.validateUser(user)){ //验证用户名、密码是否匹配 request.getSession().setAttribute(CrazySnailConstants.USER, user.getEmail()); //若匹配,则存放到session中 return "index"; } request.getSession().setAttribute("errormsg", "邮箱、密码不匹配,请重新输入"); return "login"; //登录失败,返回登录页面 }
注:session数据是放在服务器上的,因而每次重新启动Tomcat时,session数据会被清空,需要重新登录。
2、通过Filter实现用户权限控制;
通过在web.xml中配置Filter来对特定的用户请求进行过滤,判断当前session中是否存在用户登录的相关数据,若存在相关数据,则允许访问;否则提示用户登录。
另外,tomcat默认配置中,session的默认有效期为30分钟,可通过查看apache-tomcat-7.0.53\conf\web.xml进行查看。也可以通过在web.xml中通过<session-config>来配置session的有效期。
<session-config> <session-timeout>30</session-timeout> <!-- 时间单位为分钟 --> </session-config>
tomcat的会话超时可以在多个级别上设置:tomcat实例级别、Web应 用级别、servlet级别以及运行时Context代码级别。较低级别的设定会覆盖较高级别的设定。一般常用的是在前面两个级别上设置,分别在 /conf/web.xml和/webapps/yourapp/WEB-INF/web.xml。
权限控制实现:
首先,过滤器类的实现;
package com.crazysnail.filter; public class AuthenFilter implements Filter{ private static Logger logger = Logger.getLogger(AuthenFilter.class); @Override public void destroy() { } @Override public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException { HttpServletRequest httpServletRequest = (HttpServletRequest) request; if(httpServletRequest.getSession().getAttribute(CrazySnailConstants.USER)!=null){ //判断session中是否存在用户登录的相关数据 chain.doFilter(request, response); }else{ httpServletRequest.getRequestDispatcher("./loginfail").forward(request, response); //若不存在,则提示用户登录失败 } } @Override public void init(FilterConfig arg0) throws ServletException { } }
自定义过滤器类时,需要实现Filter接口,其中过滤机制的实现是在doFilter方法中。
其次,在web.xml中添加过滤器配置;
<!-- 用户权限控制 --> <filter> <filter-name>authenFilter</filter-name> <filter-class>com.crazysnail.filter.AuthenFilter</filter-class> </filter> <filter-mapping> <filter-name>authenFilter</filter-name> <url-pattern>/user/*</url-pattern> </filter-mapping>
该过滤器,对URL路径中包含/user/的路径进行了过滤,进行权限验证,进而实现简单的权限控制功能。
推荐阅读
-
centos的安装与配置,Linux下基本命令、权限控制,解压缩文件以及软件的安装与卸载
-
mysql 开发进阶篇系列 52 权限与安全(系统四个权限表的粒度控制关系)
-
浅谈vue后台管理系统权限控制思考与实践
-
windows下安装oracle11g测试是否成功与监听器问题和网页控制台登录
-
springMVC+request.session实现用户登录和访问权限控制
-
.net 单点登录的设计与实践
-
token与用户权限-前端权限控制-RBAC模型
-
C++知识点46——类继承中的类型转换与访问权限控制(中)
-
利用会话控制实现页面登录与注销功能(高颜值许愿墙实例源码)
-
Springboot+Spring Security实现前后端分离登录认证及权限控制的示例代码