jfinal使用session判断是否登录以及登录超时
2015-04-24 17:18
288 查看
利用jfinal的缓存插件验证登录,以及空闲超时退出登录。
未登录直接请求url将被跳转到登录页。
一、登录处理
public class LoginController extends BaseController {
public void index() {
}
public void login() {
try {
Record user = Db.findFirst("select * from sys_user where name = ? and password = ? ", this.getPara("username"), this.getPara("password"));
if (user != null) {
this.toMessageJson(200, "登录成功");
String sid=getSession().getId();
CacheKit.put("LoginUserCache", sid, user); // 将用户信息保存到缓存,用作超时判断
}else{
this.toMessageJson(300, "用户名或密码错误");
}
} catch(AuthenticationException e) {
this.toMessageJson(300, "用户名或密码错误");
}
}
}
登录成功后保存user对象到缓存,作为以后判断的依据。注意要用session的id作为缓存的key,确保区分不同终端的请求。
二、拦截所有请求
public class LoginInterceptor implements Interceptor {
@Override
public void intercept(ActionInvocation ai) {
Controller ctl=ai.getController();
//判断用户是否登录
String sid=ctl.getSession().getId();
Record user=CacheKit.get("LoginUserCache", sid);
String action=ai.getActionKey();
if(user!=null || action.indexOf("login")>=0){
ai.invoke();
}else{
ctl.redirect("/login");
}
}
}
上面代码中,对所有请求进行拦截,请求路径中带有login的,予以放行。其他的根据sessionid获得cache中存储的user对象,如果为空表示未登录,或登录超时cache清空。需要重新登录,跳转到登录页。
三、注册全局拦截器
public class DemoConfig extends JFinalConfig{
。。。。。。
@Override
public void configInterceptor(Interceptors me) {
me.add(new LoginInterceptor());
}
。。。。。。
}
四、缓存配置文件
在src目录下编辑ehcache-shiro.xml文件,<ehcache>区块中增加如下内容:
<cache name="LoginUserCache"
maxElementsInMemory="10000"
overflowToDisk="false" //数量过大是否保存至磁盘
eternal="false" //是否永久保留
timeToLiveSeconds="6000" //存在时长
timeToIdleSeconds="60"/> //空闲保留时长(60s即为登录空闲超时时长)
未登录直接请求url将被跳转到登录页。
一、登录处理
public class LoginController extends BaseController {
public void index() {
}
public void login() {
try {
Record user = Db.findFirst("select * from sys_user where name = ? and password = ? ", this.getPara("username"), this.getPara("password"));
if (user != null) {
this.toMessageJson(200, "登录成功");
String sid=getSession().getId();
CacheKit.put("LoginUserCache", sid, user); // 将用户信息保存到缓存,用作超时判断
}else{
this.toMessageJson(300, "用户名或密码错误");
}
} catch(AuthenticationException e) {
this.toMessageJson(300, "用户名或密码错误");
}
}
}
登录成功后保存user对象到缓存,作为以后判断的依据。注意要用session的id作为缓存的key,确保区分不同终端的请求。
二、拦截所有请求
public class LoginInterceptor implements Interceptor {
@Override
public void intercept(ActionInvocation ai) {
Controller ctl=ai.getController();
//判断用户是否登录
String sid=ctl.getSession().getId();
Record user=CacheKit.get("LoginUserCache", sid);
String action=ai.getActionKey();
if(user!=null || action.indexOf("login")>=0){
ai.invoke();
}else{
ctl.redirect("/login");
}
}
}
上面代码中,对所有请求进行拦截,请求路径中带有login的,予以放行。其他的根据sessionid获得cache中存储的user对象,如果为空表示未登录,或登录超时cache清空。需要重新登录,跳转到登录页。
三、注册全局拦截器
public class DemoConfig extends JFinalConfig{
。。。。。。
@Override
public void configInterceptor(Interceptors me) {
me.add(new LoginInterceptor());
}
。。。。。。
}
四、缓存配置文件
在src目录下编辑ehcache-shiro.xml文件,<ehcache>区块中增加如下内容:
<cache name="LoginUserCache"
maxElementsInMemory="10000"
overflowToDisk="false" //数量过大是否保存至磁盘
eternal="false" //是否永久保留
timeToLiveSeconds="6000" //存在时长
timeToIdleSeconds="60"/> //空闲保留时长(60s即为登录空闲超时时长)
相关文章推荐
- 在ASP.NET中怎么用SESSION判断用户是否登录? 以及Session登陆后丢失的解决办法
- 登录判断 之 asp.net 使用继承类的Session,判断用户是否登录
- session失效,使用ajax请求数据被拦截,此时正常的处理逻辑是跳到登录界面,而不是界面没有变化(java判断是否是ajax请求)
- 判断Session是否登录,否则跳转登录页面
- destoon 的登录过程,如何使用cookie来判断用户是否登录
- 在ASP.NET中怎么用SESSION判断用户是否登录
- Common Subsequence 动态规划 不难 但是犯了个错误刚开始 没用标记数组 直接使用a判断 是否为零 结果是测试数据有很多key为零 超时
- 牛腩购物4 aspnetpager控件的使用 以及 linkbutton 如何传值,判断传入的id值是否为数字
- C#获取已被使用的网络端点以及判断端口是否已被使用
- asp.net 使用内置票据来判断某用户是否有权限登录此网页
- asp.net mvc的Filter来验证Forms 判断是否登录,角色权限以及错误处理(转)
- session判断页面是否已经登录的问题
- 判断 网络是否通常,以及判断用户使用的网络类型,时2G\3G\还是wifi
- 使用session判断用户登录用户权限(超简单)
- Smarty模版中获取session等参数以及通过session判断登录状况
- 登录判断 之 asp.net 使用内置票据来判断某用户是否有权限登录此网页
- 登录判断 之 Global通过Session,统一判断是否是否登录
- 使用tabhost换号登录情况是否需要刷新tab页的逻辑判断
- 检查session判断用户是否退出登录
- session 判断是否登录的传值实例