此文章发布于70
个月前,部分信息可能已经过时
,请自行斟酌确认。
最近微酷在学习 Java 最牛逼的开发框架Spring Boot
,这两天学到了shiro
安全框架,在写shiro 自定义密码验证规则
时遇到一个很简单的问题,但因为 java 基础不扎实还小难为了一会,研究了下才解决。
问题描述
shiro 自定义密码验证规则需要重写doCredentialsMatch()
方法,可以通过token.getCredentials()
获取到用户登录时填写的密码,但类型是Object
,断点调试发现是一个char[]
数组,然后就在转 String 时死活转不过来了,得到的 string 是类似这样的:[C@4645fdb4
原因及解决方案:
自己写了一个 char[] 然后用网上找的方法转 string 是没有问题的,为什么这个密码不行呢,原来这个密码是 Object 类型,需要先强制转成 char[] 再去转 string 就没有问题了。
正确姿势:
String pwd = new String((char[]) token.getCredentials());`
//或者
String pwd = String.valueOf((char[]]))token.getCredentials());