小米手机获取手机信息返回空消息

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了小米手机获取手机信息返回空消息相关的知识,希望对你有一定的参考价值。

参考技术A Copyright © 1999-2020, CSDN.NET, All Rights Reserved


 登录
shiro登录之后返回之前的页面(空指针异常问题解决)
前言

在日常项目开发过程中,登录注册功能是比较常见的。公司项目使用shiro作为安全框架,我们一般在使用shiro登录之后,会跳转到默认的首页。上面这种登录方式是用户直接访问登录,但是在实际应用中我们经常会留出一些页面给游客查看,当然这些页面中的一些详细信息就需要注册或者登录之后才能查看了,如果该用户没有登录,我们应该给他拦截住,让他去登录。那么一个用户在应用的一个页面想查看该页面的详细信息,点击之后需要,该用户登录了,结果直接返回到应用的首页。用户刚才想要查看的页面都没了。用户如果想要查看刚才自己浏览的页面还得自己慢慢点击过去,这样的用户体验显然不是很好。那么有没有什么办法能让被拦截的用户登录之后直接跳转到刚才用户请求的页面呢?

基于shiro的功能实现

对于上面的功能实现,其实shiro已经帮我们考虑到了,我们不需要自己来实现了。之前想过用拦截器来拦截请求,然后获取请求的请求信息,然后存到session中去,在用户登录之后再从session中取出来,然后重定向过去,其实shiro的实现原理大致也是这样。我们可以看看shiro的源码,在shiro中如果我们的请求没有经过验证,shiro会调用saveRequest方法来将之前的请求存到session中,具体源码如下


然后我们再登录之后,就可以从session中来进去获取就行了,这个获取方法shiro也已经帮我们写好了,具体源码如下


我们在登录方法中添加这几行代码就可以实现上面的功能了

SavedRequest savedRequest=WebUtils.getSavedRequest(request);
if(null!=savedRequest)
System.out.println("注意登录之前的路径是"+savedRequest.getRequestUrl());
return "redirect:" + savedRequest.getRequestUrl().substring(8);


所以说shiro还是很实用的

获取到的savedRequest为空

按照上面的思路,本以为功能应该实现了,但是在登录之后却莫名其妙的报了个空指针异常。原来是上面获取的savedRequest是null,那是怎么回事呢?难道shiro没有将登录之前的请求存储到session之中,后来仔细看了一下我们项目中在用shiro登录的时候,为了防止会话劫持,在登录的方法里面是手动把session注销了,然后又重新生成了session,所以在后生成的session中是没有保存之前的请求数据的,所以就报空指针异常了。所以把下面的会话注销注释掉就行了

Subject sb = SecurityUtils.getSubject();
Session se = sb.getSession();
UsernamePasswordToken token=new UsernamePasswordToken(username, password);
sb.login(token);
/*se.stop();
sb.login(token);*/
se=sb.getSession(true);

还有一点需要注意shiro不会把所有请求的信息都存放在session之中,只有那些没有经过验证的请求,所以这些请求,我们不能在shiro的过滤链中把他过滤掉。

总结

上面只是对于shiro使用的小总结,上面的功能其实spring security安全框架中也有类似功能,我们需要根据自己项目中实际使用情况来进行灵活运用!

华强北8手表连接小米手机没有微信推送

参考技术A 只有手表和手机蓝牙正常连接状态下才会有微信推送,且只有当手机屏幕熄灭时(微信在后台运行),微信消息才会推送到手表1.手表和手机

以上是关于小米手机获取手机信息返回空消息的主要内容,如果未能解决你的问题,请参考以下文章

小米手机不用电脑怎么root?

小米手机微信视频播放的设置,微信收到视频自动就播放,自动走流量,如何让视频不自动播放

小米手机屏幕锁要用Google账户登录,要怎么登录?

小米手机怎么root 小米手机root的方法步骤介绍

小米手机怎么root 小米手机root的方法步骤介绍

小米手机米柚有个文件叫Gallery,但是显示是空文件,但却内存很大,为啥?