为什么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)相关推荐

  1. PyTorch框架学习八——PyTorch数据读取机制(简述)

    PyTorch框架学习八--PyTorch数据读取机制(简述) 一.数据 二.DataLoader与Dataset 1.torch.utils.data.DataLoader 2.torch.util ...

  2. SpringMVC框架 学习DAY_03:@RequestMapping注解/拦截器与过滤器

    1. 关于@RequestMapping注解 在控制器中,在处理请求的方法之前添加@RequestMapping注解,可以配置请求路径与处理请求的方法的映射关系! 在@RequestMapping注解 ...

  3. 高通WLAN框架学习(35)-- EDCA机制

    在说高通针对EDCA机制之前,可以看下这篇博客写的不错 (五)EDCA机制详解 高通的代码位于cfg_mlme_edca_params.h文件中 /* 267 * <ini> 268 * ...

  4. pythonb超分辨成像_Papers | 超分辨 + 深度学习(未完待续)

    1. SRCNN 1.1. Contribution end-to-end深度学习应用在超分辨领域的开山之作(非 end-to-end 见 Story.3 ). 指出了超分辨方向上传统方法( spar ...

  5. Spring Boot 框架学习笔记(五)( SpringSecurity安全框架 )

    Spring Boot 框架学习笔记(五) SpringSecurity安全框架 概述 作用 开发示例: 1. 新建项目 2. 引入依赖 3. 编写`SecurityConfig`类,实现认证,授权, ...

  6. Spring框架学习笔记,超详细!!(4)

    Java小白开始学习Spring框架,一方面,跟着视频学习,并记录下学习笔记,方便以后复习回顾.另一方面,发布学习笔记来约束自己,学习路程还很遥远,继续加油坚持!!!希望能帮助到大家! 另外还有我的牛 ...

  7. jQuery框架学习第二天:jQuery中万能的选择器

    jQuery框架学习第一天:开始认识jQuery jQuery框架学习第二天:jQuery中万能的选择器 jQuery框架学习第三天:如何管理jQuery包装集 jQuery框架学习第四天:使用jQu ...

  8. OpenCV学习之六: 使用方向梯度直方图估计图像旋转角度

    OpenCV学习之六: 使用方向梯度直方图估计图像旋转角度 原文:http://blog.csdn.net/zhjm07054115/article/details/26964275 下面的代码通过计 ...

  9. jQuery框架学习第一天:开始认识jQuery

    jQuery框架学习第一天:开始认识jQuery jQuery框架学习第二天:jQuery中万能的选择器 jQuery框架学习第三天:如何管理jQuery包装集 jQuery框架学习第四天:使用jQu ...

最新文章

  1. 打开流 fopen 、freopen和fdopen函数
  2. Verizon发布2010年数据破坏调查报告
  3. 1.0 MySQL数据库基础知识
  4. 【渝粤教育】电大中专常见病药物治疗作业 题库
  5. 推动Windows的限制:虚拟内存
  6. 本地安装magento无法登陆后台的问题
  7. golang之tcp自动重连
  8. 是用于mac的linux,用于Mac OS X的Can(CUPS)ppd文件可用于Linux吗?
  9. 队列,链队列,链式存储的队列
  10. 量子加密_量子强化加密协议
  11. easydarwin php,EasyDarwin返回401 Unauthorized解决方法
  12. UVa OJ 10105
  13. 小甲鱼(鱼C)课后作业代码 39讲
  14. 在线教育未来的发展前景如何?
  15. 几款接口文档管理工具
  16. 拥有一本CISP证书,我的工资会翻倍吗?
  17. 利用python,求解数独
  18. 零基础学Python--机器学习(一):人工智能与机器学习概述
  19. 电子商务的发展现状与趋势分析
  20. 调查问卷生成json字符串

热门文章

  1. 实现双击IE9的Tab键关闭当前页面的功能
  2. 合理设置apache参数
  3. eolinker开源版5_开源土豪沉金版空气质量检测仪AirWolf
  4. Metasploit运行环境内存不要低于2GB
  5. MAC OS 10.10.5虚拟机免费下载(可安装Xcode7)
  6. android 电视安装apk文件损坏,android - 无法在Android电视盒上安装APK - 堆栈内存溢出...
  7. mock模拟的数据能增删改查吗_Mock.js模拟数据,脱离后端独立开发,实现增删改查功能...
  8. python无法安装pillow_pyhton安装pillow问题解决
  9. bootstrapr表格父子框_使用Bootstrap Table建立父子表
  10. 解决电脑重启后 ubuntu 不能联网