Play 1.x框架学习之六:未登陆拦截机制 (Not Login intercept In play framework)
为什么80%的码农都做不了架构师?>>>
未登录拦截功能,这是web应用中比较常见的,在本文中,我们结合redis来做未登录拦截。其原理是将sessionid作为key,等登陆的用户id作为value(也可能存储一个专门的对象,保存登陆信息等)。每个请求来之时拦截,然后查询redis中是否有,有则放行,没有则跳转到登陆界面。 控制器父类Application中的拦截方法,其中的Before注解中的unless是指拦截白名单方法数组: app.controllers.Application.java
@Before(unless={"Application.index","LoginAction.login"})
public static void LoginedIntercept() {String sessionId = Session.current().getId();Long userid = (Long) Redis.getObject(sessionId);if(userid == null){String msg = "请先登陆";render("Application/log.html",msg);}
}
登录功能控制器 app.controllers.LoginAction.java
package controllers;import play.db.jpa.GenericModel.JPAQuery;
import play.mvc.Scope.Session;
import util.Redis;
import models.User;public class LoginAction extends Application{public static void login(String logwords,String pwd){JPAQuery query = User.find("pwd = ? and (code = ? or email = ?)", pwd,logwords,logwords);User user = query.first();if(user != null){String sessionId = Session.current().getId();Redis.set(sessionId, user.id, 100);UserAction.load(user.id);}String msg = "账号或密码错误";render("Application/log.html",msg);}
}
redis的封装帮助类 util.Redis.java
package controllers;
package util;import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.io.UnsupportedEncodingException;import play.modules.redis.RedisConnectionManager;public class Redis{public static void set(String key,Object value,int expiretime){ByteArrayOutputStream baos=new ByteArrayOutputStream();ObjectOutputStream oos;try {oos = new ObjectOutputStream(baos);oos.writeObject(value);byte[] buf=baos.toByteArray();oos.flush();RedisConnectionManager.getRawConnection().setex(key.getBytes("UTF-8"),expiretime*60, buf);} catch (IOException e) {e.printStackTrace();}}public static Object getObject(String key){Object objVal=null;byte[] value=null;try {value=RedisConnectionManager.getRawConnection().get(key.getBytes("UTF-8"));} catch (UnsupportedEncodingException e) {e.printStackTrace();}if (value!=null) {ByteArrayInputStream bais=new ByteArrayInputStream(value);try {ObjectInputStream ois=new ObjectInputStream(bais);objVal=ois.readObject();} catch (IOException e) {e.printStackTrace();} catch (ClassNotFoundException e) {e.printStackTrace();}}return objVal;}
}
配置redis/mysql conf/application.conf
jpa.dialect=org.hibernate.dialect.MySQLDialect
db.url=jdbc:mysql://localhost:3306/pop?autoReconnect=true&useUnicode=true&characterEncoding=utf-8
db.driver=com.mysql.jdbc.Driver
db.user=root
db.pass=root
db=popredis.cache=enabled
redis.url=redis://127.0.0.1:6379
redis.cache.url=redis://127.0.0.1:6379
登陆页面
#{extends 'main.html' /}
#{set title:'Home' /}
<body><div><span style="color: red">${msg}</span><form action="/login" method="post" id="myform"><label>账号:</label><input type="text" id="lognameid" name="logwords"/><br/><label>密码</label><input type="password" id="pwdid" name="pwd"/><input type="submit" value="log"></form></div>
</body>
route文件就不给了,运行结果:
转载于:https://my.oschina.net/markho/blog/498134
Play 1.x框架学习之六:未登陆拦截机制 (Not Login intercept In play framework)相关推荐
- PyTorch框架学习八——PyTorch数据读取机制(简述)
PyTorch框架学习八--PyTorch数据读取机制(简述) 一.数据 二.DataLoader与Dataset 1.torch.utils.data.DataLoader 2.torch.util ...
- SpringMVC框架 学习DAY_03:@RequestMapping注解/拦截器与过滤器
1. 关于@RequestMapping注解 在控制器中,在处理请求的方法之前添加@RequestMapping注解,可以配置请求路径与处理请求的方法的映射关系! 在@RequestMapping注解 ...
- 高通WLAN框架学习(35)-- EDCA机制
在说高通针对EDCA机制之前,可以看下这篇博客写的不错 (五)EDCA机制详解 高通的代码位于cfg_mlme_edca_params.h文件中 /* 267 * <ini> 268 * ...
- pythonb超分辨成像_Papers | 超分辨 + 深度学习(未完待续)
1. SRCNN 1.1. Contribution end-to-end深度学习应用在超分辨领域的开山之作(非 end-to-end 见 Story.3 ). 指出了超分辨方向上传统方法( spar ...
- Spring Boot 框架学习笔记(五)( SpringSecurity安全框架 )
Spring Boot 框架学习笔记(五) SpringSecurity安全框架 概述 作用 开发示例: 1. 新建项目 2. 引入依赖 3. 编写`SecurityConfig`类,实现认证,授权, ...
- Spring框架学习笔记,超详细!!(4)
Java小白开始学习Spring框架,一方面,跟着视频学习,并记录下学习笔记,方便以后复习回顾.另一方面,发布学习笔记来约束自己,学习路程还很遥远,继续加油坚持!!!希望能帮助到大家! 另外还有我的牛 ...
- jQuery框架学习第二天:jQuery中万能的选择器
jQuery框架学习第一天:开始认识jQuery jQuery框架学习第二天:jQuery中万能的选择器 jQuery框架学习第三天:如何管理jQuery包装集 jQuery框架学习第四天:使用jQu ...
- OpenCV学习之六: 使用方向梯度直方图估计图像旋转角度
OpenCV学习之六: 使用方向梯度直方图估计图像旋转角度 原文:http://blog.csdn.net/zhjm07054115/article/details/26964275 下面的代码通过计 ...
- jQuery框架学习第一天:开始认识jQuery
jQuery框架学习第一天:开始认识jQuery jQuery框架学习第二天:jQuery中万能的选择器 jQuery框架学习第三天:如何管理jQuery包装集 jQuery框架学习第四天:使用jQu ...
最新文章
- 打开流 fopen 、freopen和fdopen函数
- Verizon发布2010年数据破坏调查报告
- 1.0 MySQL数据库基础知识
- 【渝粤教育】电大中专常见病药物治疗作业 题库
- 推动Windows的限制:虚拟内存
- 本地安装magento无法登陆后台的问题
- golang之tcp自动重连
- 是用于mac的linux,用于Mac OS X的Can(CUPS)ppd文件可用于Linux吗?
- 队列,链队列,链式存储的队列
- 量子加密_量子强化加密协议
- easydarwin php,EasyDarwin返回401 Unauthorized解决方法
- UVa OJ 10105
- 小甲鱼(鱼C)课后作业代码 39讲
- 在线教育未来的发展前景如何?
- 几款接口文档管理工具
- 拥有一本CISP证书,我的工资会翻倍吗?
- 利用python,求解数独
- 零基础学Python--机器学习(一):人工智能与机器学习概述
- 电子商务的发展现状与趋势分析
- 调查问卷生成json字符串
热门文章
- 实现双击IE9的Tab键关闭当前页面的功能
- 合理设置apache参数
- eolinker开源版5_开源土豪沉金版空气质量检测仪AirWolf
- Metasploit运行环境内存不要低于2GB
- MAC OS 10.10.5虚拟机免费下载(可安装Xcode7)
- android 电视安装apk文件损坏,android - 无法在Android电视盒上安装APK - 堆栈内存溢出...
- mock模拟的数据能增删改查吗_Mock.js模拟数据,脱离后端独立开发,实现增删改查功能...
- python无法安装pillow_pyhton安装pillow问题解决
- bootstrapr表格父子框_使用Bootstrap Table建立父子表
- 解决电脑重启后 ubuntu 不能联网