springMVC+request.session实现用户登录和访问权限控制
程序员文章站
2022-04-24 18:28:14
用springmvc mybatis实现用户登录登出功能,使用session保持登录状态,并实现禁止未登录的用户访问。感谢谷歌资源,在这里做个学习记录加深自己的印象。 原文在我的 "https://my.oschina.net/finchxu/blog/3010138" 接着上次的整合 "https ......
用springmvc mybatis实现用户登录登出功能,使用session保持登录状态,并实现禁止未登录的用户访问。感谢谷歌资源,在这里做个学习记录加深自己的印象。
原文在我的
接着上次的整合
上传到了github方便查看
src └── main── java │ └── cn── book │ ├── controller │ │ ├── bookscontroller.java │ │ ├── logininterceptor.java │ │ └── userscontroller.java │ ├── mapper │ │ ├── booksmapper.java │ │ ├── booksmapper.xml │ │ ├── usersmapper.java │ │ └── usersmapper.xml │ ├── pojo │ │ ├── bookadmin.java │ │ └── useradmin.java │ └── service │ ├── booksserviceimpl.java │ ├── booksservice.java │ ├── usersserviceimpl.java ├── resources └── usersservice.java │ ├── applicationcontext-dao.xml │ ├── applicationcontext-service.xml │ ├── applicationcontext-trans.xml │ ├── jdbc.properties │ ├── log4j.properties │ ├── spring-mvc.xml │ └── sqlmapconfig.xml └── webapp ├── index.jsp └── web-inf ├── jsp │ ├── bookdetail.jsp │ ├── fail.jsp │ ├── home.jsp │ ├── listbooks.jsp │ ├── updatepage.jsp │ └── userlogin.jsp ├── static │ ├── img │ └── js │ └── jquery3.js └── web.xml
先看controller吧,还是两步,进入/home/userlogin页面,然后输入用户名和密码开始登陆,验证用户名和密码,正确就建立session保持状态,错误就提示重新输入。
@controller @requestmapping("/home") public class userscontroller { @autowired private usersservice usersservice; //进入login页面 @requestmapping("/userlogin") public string userlogin(){ return "userlogin"; } //执行login操作,匹配用户名和密码,建立session持久连接 @requestmapping(value = "/login",method = requestmethod.post) public string login(useradmin useradmin, model model, httpservletrequest request){ useradmin = usersservice.checklogin(useradmin.getuser_name(),useradmin.getuser_password()); if (useradmin != null){ model.addattribute(useradmin); request.getsession(true).setattribute("useradmin",useradmin); return "redirect:/a/listbooks"; }else { model.addattribute("message","登录名或密码错误!"); return "userlogin"; } } //logout登出,其实就是删除之前登录时设置的session @requestmapping("/logout") public string logout(httpservletrequest request) { request.getsession().removeattribute("useradmin"); return "redirect:userlogin"; } }
service部分实现验证用户密码正确与否
接口 @service public interface usersservice { useradmin checklogin(string user_name,string user_password); } 实现 @service @transactional public class usersserviceimpl implements usersservice{ @autowired private usersmapper usersmapper; @override public useradmin checklogin(string user_name,string user_password){ useradmin useradmin = usersmapper.finduserbyname(user_name); if (useradmin != null && useradmin.getuser_password().equals(user_password)){ return useradmin; } return null; } }
然后要设置访问控制,只有登录的用户才能访问所有页面,当然这个/home/userlogin页面肯定要排除不然怎么登录啊。下边写一个拦截器。
重写了handlerinterceptor的接口,三个方法,这里只用prehandle()方法。prehandle()方法,boolean布尔类型,false表示请求结束,true代表继续执行(如果是最后一个拦截器那么就会调用当前controller的方法)
public class logininterceptor implements handlerinterceptor { @override public boolean prehandle(httpservletrequest request, httpservletresponse response, object handler) throws exception { //获取请求的地址(根域名以外的部分) string uri = request.getrequesturi(); if (uri.indexof("/home/userlogin") >= 0){ return true; } //获取session,有就是说明已经登录,没有就是拦截访问并跳转到登录页面 httpsession session = request.getsession(); useradmin useradmin = (useradmin) session.getattribute("useradmin"); if (useradmin != null){ return true; } request.setattribute("msg","还没登陆!快去登陆啊!"); request.getrequestdispatcher("/web-inf/jsp/userlogin.jsp").forward(request,response); return false; } @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 { } }
写个userlogin.jsp
<%@ page contenttype="text/html;charset=utf-8" language="java" %> <html> <head> <title>快登录!</title> <style> #center{ border-radius: 20px; width: 300px; height: 350px; margin: auto; position: absolute; top: 0; left: 0; right: 0; bottom: 0; } </style> <link rel="stylesheet" type="text/css" href="static/lib/bootstrap43/css/bootstrap.min.css"/> <script type="text/javascript" src="static/js/jquery3.js"></script> <script src="static/lib/bootstrap43/js/bootstrap.min.js"></script> </head> <body bgcolor="#ffe4c4"> <div id="center"> <h2>欢迎登录图书管理系统</h2> <div style="color: deeppink"> <p>${message }</p> <%--这里显示上边的controller里边用户或者密码错误的信息--%> </div> <form id="login" action="${pagecontext.request.contextpath}/home/login" method="post"> <table class="table"> <tr> <td>用户名:</td> <td><input type="text" id="user_name" name="user_name" class="form-control"/></td> </tr> <tr> <td>密码:</td> <td><input type="password" id="user_password" name="user_password" class="form-control"/></td> </tr> <tr> <td><input type="submit" value="点击登录" id="login0"/></td> </tr> </table> </form> </div> </body> </html>
当然还有实体类和mapper
pojo: public class useradmin { integer user_id; string user_name; string user_password; ...get和set...省略 } mapper.java: public interface usersmapper {useradmin finduserbyname(string user_name);} mapper.xml: <?xml version="1.0" encoding="utf-8" ?> <!doctype mapper public "-//mybatis.org//dtd mapper 3.0//en" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> <mapper namespace="cn.book.mapper.usersmapper"> <sql id="base_table"> useradmin </sql> <sql id="base_column"> user_id,user_name,user_password </sql> <select id="finduserbyname" parametertype="string" resulttype="useradmin"> select * from useradmin where user_name = #{user_name} </select> </mapper>
感谢谷歌提供的资源。
下一篇: 前后端分离浅析
推荐阅读
-
Springboot+SpringSecurity+JWT实现用户登录和权限认证示例
-
springMVC+request.session实现用户登录和访问权限控制
-
ASP.NET MVC+EF框架+EasyUI实现权限管理系列(12)-实现用户异步登录和T4模板
-
springboot+shiro实现用户登录认证和权限管理(二)
-
django 实现编写控制登录和访问权限控制的中间件方法
-
php中Zend_Auth和Zend_Acl进行登录认证及根据用户角色进行权限控制 (1/4)_PHP教程
-
Springboot+SpringSecurity+JWT实现用户登录和权限认证示例
-
ASP.NET MVC+EF框架+EasyUI实现权限管理系列(12)-实现用户异步登录和T4模板
-
springMVC+request.session实现用户登录和访问权限控制
-
yii2搭建完美后台并实现rbac权限控制案例教程 访问控制和权限 权限控制框架 identity权限控