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 MaptokenMap=new HashMap();

/**

*存储“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());

}

返回令牌;

}

}

4.同时,我们的客户端也在登录后获得令牌。只要我们在所有需要权限的请求中携带令牌,我们就可以成功地获得响应(建议:为了app编码的方便,令牌可以在请求头中携带,现有代码不需要进行很大的更改,我们未来也不必关心令牌)。我随机找到了一种方法

相关资讯:
农产品电子商务向企业个人农产品电子贸易方向发展的效益

农产品电子商务向企业个人农产品电子贸易方向发展的效益

查看
Web 3.0技术的基本方向

Web 3.0技术的基本方向

查看
认知

认知

查看
面向对象的

面向对象的

查看
2018-12-25

2018-12-25

查看