NutzCN Logo
问答 redis保存了用户的信息,怎么加强安全性 只有登陆才能操作
发布于 2803天前 作者 qq_64f81159 2317 次浏览 复制 上一个帖子 下一个帖子
标签:

加强安全性

当前的增删改查,无论登陆与否都可以操作,实在太不靠谱了,所以,还是加个检查吧.

判断用户登陆

UserModule添加一个注解

@Filters(@By(type=CheckSession.class, args={"me", "/"}))
含义是,如果当前Session没有带me这个attr,就跳转到/页面,即首页.

同时,为login方法设置为空的过滤器,不然就没法登陆了

@Filters()

这里我用redis保存了用户的信息,key是一个token,值是用户信息的json串,那这里假如自定义了一个filter的话,怎么把这个token传到filter里面去呢?

6 回复

token是个cookie?

这个就是自己定义的一个东西吧

public Map<String,String> userLogin(String userName,String password){
		Jedis jedis = null;
		Map<String,String> result = new HashMap<String,String>();
		User user = dao.fetch(User.class,Cnd.where("username","=",userName));
		
	    try { // JDK6的写法, 长长的try-finally
	    	if(user==null){
				result.put("code", "400");
				result.put("msg", "用户名或密码错误");
				
			}else{
				if(password.equals(user.getPassword())){
				    jedis = jedisAgent.getResource();
					String token = UUID.randomUUID().toString();
					jedis.set("REDIS_USER_SESSION_KEY:"+token, Json.toJson(user));
					jedis.expire("REDIS_USER_SESSION_KEY:"+token, 1800);
					result.put("code", "200");
					result.put("msg", "返回用户信息成功");
					result.put("token", token);
					System.out.println("REDIS_USER_SESSION_KEY:"+token);
				}else{
					result.put("code", "400");
					result.put("msg", "用户名或密码错误");
				}
			}
		}
		finally {
			Streams.safeClose(jedis);
		}
		
		return result;
	}

模仿session的东西,因为想测试多台tomcat做集群

难道要把这个模拟的token放到cookie中?

浏览器每次请求的时候发送token过来?? 走header还是cookie??? 不过,都得自定义一个ActionFilter做校验

我就是想问下那种方式更好,就是集群的时候,只要认证信息能共享就行了,另外如果要为安卓和IOS客户端提供接口,好像cookie是不行的,有没有更好的方式,不过,都得自定义一个ActionFilter做校验,这个那只能从request中获取参数吗,有没有其他方式?

从request取参数/header不好吗? 为什么还要找其他方式?

添加回复
请先登陆
回到顶部