app登录java后台处理和用户权限验证
浏览:1140 次

在开发任务序列方面,登录、注册和权限验证的基本功能没有放在开发的第一阶段。现在一些与业务相关的功能已经完成,但用户入口尚未可用。这只能说明最初的需求分析过于紧迫,最基本的用户入口被抛在了后面。
现在,您需要在现有代码的基础上添加用户登录和权限验证功能。
在登录和权限验证方面,参考之前的iOS开发经验,app端提供用户名和密码以交换令牌,每次请求令牌都需要登录权限。
现在,反过来,我需要考虑以下问题:
1.如何在现有功能的代码中轻松满足这些功能的实现,从而使现有代码不会发生太大变化,并且在未来不难验证新功能的权限
2.如何根据用户名和密码生成令牌,以及如何根据需要权限的功能区分客户端提供的令牌的正确性
首先,面对第一个问题。根据经验,传统的解决方案是过滤器和拦截器。如果您将登录和权限验证放在需求安排之前,那么只要后面函数的URL是常规的,那么使用过滤器或拦截器就不是件愉快的事。但我现在面临的是,在早期阶段没有设计和规范url,所以我不愿意面对过滤器或拦截器的使用。
除了上述常规解决方案之外,springAOP刚刚成为解决这类问题的强大工具。它使用正切编程对所有需要权限验证的方法进行预先通知。然而,由于URL、类名或方法不规则,我提出了自定义注释的想法,以验证所有具有自定义注释的方法的权限。
1.现在您已经想到使用spring-aop,第一步是在spring-configuration文件中启用aop
//启用aop
上述配置基于注入到项目中的spring-aop相关jar包,并且在配置文件头中引入了aop url
2.接下来,我们定义一个自定义注释
@目标({ElementType.METHOD,ElementType.TYPE})
@保留(保留策略.RUNTIME)
public@interface UserAccess{
}
3.我们不能急于执行权限验证功能,因为我们的令牌尚未生成方案。
在令牌生成方面,考虑了单点登录,因此令牌不能一直固定。否则,在任何时候,只要您有代币,您可以同时为至少两个人使用同一帐户,这在我们的业务中是不允许的。最后,我选择了“用户名+密码+登录时间”来做MD5加密作为令牌(有很多方法,如uuid,以确保唯一性和可变性)。成功验证用户名和密码后,将生成令牌,令牌将以“用户名:令牌”和“令牌:用户”密钥值对的形式保存(也可以保存在数据库中)。最后,令牌返回给客户端。
以下代码只是一个简单的示例:

@服务
公共类登录服务{
/**
*保存“用户名:令牌”键值对
*/
public static Map
/**
*存储“token:User”键值对
*/
public static Map<String,User>loginUserMap=new HashMap<String,User>();
公共字符串登录(字符串名称,字符串密码){
System.out.println(名称+“-----”+密码);
/**
*判断登录是否成功
*1.登录成功
*1.1.成功生成并更新相应的令牌
*1.2.失败时抛出异常
*/
字符串token=tokenMap.get(名称);
用户User=空;

if(标记==空){
user=新用户();
user.setName(名称);
user.setPassword(密码);
系统出来println(“新用户登录”);
}其他{
user=loginUserMap.get(令牌);
loginUserMap.remove(令牌);
系统出来println(“更新用户登录令牌”);
}
token=MD5Util。MD5(名称+密码+新日期().getTime());
登录用户映射。put(令牌,用户);
tokenMap。put(名称、令牌);
系统出来println(“当前有”+tokenMap.size()+“用户”);
for(用户u:loginUserMap.values()){
System.out.println(u.getName()+“:”+u.getPassword());
}
返回令牌;
}
}
