本文目录一览:
- 1、Shiro 用户名密码数据库校验怎么做的
- 2、java shiro认证问题如何解决?
- 3、Shiro实现登录功能的流程及配置
- 4、SpringBoot + Shiro (四)缓存&记住密码
- 5、在dispatcherservlet的配置文件中配置shiro为什么不起作用
- 6、使用Shiro加密与解密实现简单用户注册与登录验证
Shiro 用户名密码数据库校验怎么做的
可以使用shiro自带JdbcRealm,查一下API,在配置文件里配一下就是了;不过一般的应用都会实现自己的Realm,从AuthorizingRealm继承,实现非常简单。
java shiro认证问题如何解决?
如果是的话 就把spring-shiro.xml里 加密的部分去掉bean id="monitorRealm" class="com.test.util.MonitorRealm"property name="credentialsMatcher" bean class="org.apache.shiro.authc.credential.HashedCredentialsMatcher" property name="hashAlgorithmName" value="MD5"/ !-- true means hex encoded, false means base64 encoded -- property name="storedCredentialsHexEncoded" value="true"/ !-- 迭代次数 -- property name="hashIterations" value="2" / /bean /property/bean改成bean id="monitorRealm" class="com.test.util.MonitorRealm"/bean
for token submission
Authentication failed for token submission [org.apache.shiro.authc.UsernamePasswordToken - admin, rememberMe=false]. -shiro密码配置文件
Possible unexpected error? (Typical or expected login exceptions should extend from AuthenticationException).-shiro密码配置文件
原因:
我今天也遇到了这个错误,并不是密码验证错误, 我用的mabatis 有个mapperxml配置文件写错(并非登录相关的mapper),
参数类型是parametertype 我搞成了parametermap 报错就是这个错误。分析下在登录时login方法会调用我们重写的doGetAuthenticationInfo方法,
这个方法我们会通过dao实现层写的登录验证相关方法(我的是Admin admin = this.accountService.findAdmin(username))来将登录信息存入
SimpleAuthenticationInfo,就是在这个地方,项目会加载我们所配置的相关信息,对我而言就是mabatis里的xml 因为xml里的配置有错,
所以Admin admin = this.accountService.findAdmin(username)这个方法尽管与出错的xml无关也会报错。
所以说应该检查下自己与doGetAuthenticationInfo相关的配置文件是否有从,可以try{currentUser.login(token)}
catch(AuthenticationException a){}异常捕获后再次debug调试,就能发现问题出在哪里了。
Shiro实现登录功能的流程及配置
①login.html 发送AJAX异步请求到服务器,携带 username + password
②进入服务器,首先经过spring的编码过滤器,处理编码.
web.xml
③ 在服务器启动时,便创建了securityManager, 类似于dispatcherServlet 对进行登录的操作进行统一的管理.
Username + Password 生成Token,用于验证的准备
④ 创建自己的Realm,同时数据源交给spring容器管理
shiro.ini
告知shiro,配置数据源realm
⑤ 安全管理器从spring中取出数据源,进行验证.(先验证username ,再验证密码,验证成功则将用户存入缓存(session),以备验证使用)
后续页面发送请求携带sessionId,验证是否存在此用户.(下为源码)
⑥验证完成后,经过一系列的过滤器
这些过滤器配置在shiro.xml中.
在web.xml中配置shiro的过滤器代理DelegatingFilterProxy.在服务器启动时,到spring中寻找到这些过滤器的对象,形成调用链.
shiro的过滤器一般优先于服务器的过滤器执行.
⑦自建过滤器,返回AJAX信息
⑧经过一系列过滤器,页面接收返回信息
至此,shiro登录认证完成,用户信息存在于session中(此session被shiro封装).
在同一个会话中,页面的多次请求将通过携带SessionId,找到服务器的用户信息验证是否已登录.
下为源码
Shiro 的注销功能 也是获取session,清空session.
SpringBoot + Shiro (四)缓存&记住密码
最终demo
到这节为止,我们已经实现了身份验证和权限验证。但是,如果我们登录之后多次访问 的话,会发现权限验证会每次都执行一次。这是有问题的,因为像用户的权限这些我们提供给shiro一次就够了。
下面,我们开始给shiro添加缓存支持:
在 com.example.demo.config.Shiro.ShiroConfiguration 中添加以下方法。
将缓存对象注入到 SecurityManager 中:
在src/main/resouces/config中添加ehcache-shiro.xml配置文件:
启动项目,再多次访问 ,这时候只会在后台打印一次配置权限的信息了,说明shiro缓存起了作用。
---------------------下面我们开始配置记住密码-----------
将rememberMeManager注入到SecurityManager中
在 ShiroFilterFactoryBean 中添加记住我过滤器 user ,添加 user 过滤器的资源在记住我或认证之后就可以直接访问了。
最后,在login.html页面添加记住我单选框
启动项目,正常登录后关闭浏览器,再打开浏览器输入 ,这时候就可以直接访问index页面,不需要再登录了。
SpringBoot + Shiro (一)基础工程搭建
SpringBoot + Shiro (二)身份校验和角色设置
SpringBoot + Shiro (三)权限
SpringBoot + Shiro (四)缓存记住密码
SpringBoot + Shiro (五)验证码
最后,感谢几位作者的文章解惑:
springboot整合shiro-登录认证和权限管理
Spring Boot Shiro权限管理【从零开始学Spring Boot】
Spring boot 中使用Shiro
最后帮朋友打个小广告
一个有趣的迷你小程序
在dispatcherservlet的配置文件中配置shiro为什么不起作用
说具体一点,请。
推荐一套完整的Shiro Demo,免费的。
Shiro介绍文档:
Demo已经部署到线上,地址是
管理员帐号:admin,密码:sojson.com 如果密码错误,请用sojson。PS:你可以注册自己的帐号,然后用管理员赋权限给你自己的帐号,但是,每20分钟会把数据初始化一次。建议自己下载源码,让Demo跑起来,然后跑的更快。-shiro密码配置文件
使用Shiro加密与解密实现简单用户注册与登录验证
编码与解码
Shiro 提供了 base64 和 16 进制字符串编码、解码的API 支持,方便一些编码解码操作。Shiro 内部的一些数据的存储、表示都使用了base64 和 16 进制字符串。
1、base64 编码与解码
String str = "admin";
String base64Encoded = Base64. encodeToString (str.getBytes());
String str2 = Base64. decodeToString (base64Encoded);
logger .info(str+"==="+base64Encoded+"=="+str2);
2、16 进制字符串编码与解码
String str3 = "test";
String hexEncoded2 = Hex. encodeToString (str3.getBytes());
String str4 = new String(Hex. decode (hexEncoded2.getBytes()));
logger .info(str3+"==="+hexEncoded2+"=="+str4);
散列算法加密
散列算法一般用于生成数据的重要信息,是一种不可逆的算法,适合存储密码之类的数据,常见的散列算法如MD5、SHA 等。
[if !supportLists]1、[endif]MD5算法盐值加密
String pswd= "123456";
String salt = "123";
String md5 = new Md5Hash(pswd, salt).toString();
另外散列时还可以指定散列次数,new Md5Hash(pswd, salt, 2).toString(),数字2代表加密次数。
[if !supportLists]2、[endif]SHA256 算法盐值加密
String pswd= "123456";
String salt = "123";
String sha = new Sha256Hash(pswd, salt).toString();
[if !supportLists]3、[endif]SHA1算法盐值加密
String pswd= "123456";
String salt = "123";
String sha = new Sha1Hash(pswd, salt).toString();
4、SHA512算法盐值加密
String pswd = "123456";
String salt = "123";
String sha = new Sha512Hash(pswd, salt).toString();
[if !supportLists]5、[endif]Shiro 还提供了通用的散列SimpleHash
String pswd = "123456";
String salt = "123";
//内部使用MessageDigest
String simpleHash=
new SimpleHash("SHA-1",pswd,salt,4).toString();
Shiro 还提供对称式加密、解密算法的支持
[if !supportLists]1、[endif]AES 算法
//生成key
Key key = aesCipherService.generateNewKey();
String pswd = "123456";
//加密
String encrptText = aesCipherService.encrypt(pswd.getBytes(), key.getEncoded()).toHex();
//解密
String text2 =
new String(aesCipherService.decrypt(Hex. decode (encrptText), key.getEncoded()).getBytes());
logger .info(pswd+"==="+encrptText+"=="+text2);
简单模拟用户注册
1、首先使用SHA256算法加密密码明文,UserService层实现。
UserDaoImpl userDaoimpl ;
public static void main(String[] args) {
String email ="123@qq.com";
String password = "123";
String sha = new Sha256Hash(password, ByteSource.Util. bytes (email)).toString();//使用邮箱作为盐值
User user = new User(4L,"管理员",email,sha, new Date(), new Date(),1);
UserService userService = new UserService();
userService.insert(user);
}
public int insert(User user){
userDaoimpl = new UserDaoImpl();
return userDaoimpl.insert(user);
}
2、Dao插入数据
@Override
public int insert(User record) {
String sql = "insert into u_user(id,nickname,email,pswd,create_time,last_login_time,status) values (?,?,?,?,?,?,?)";-shiro密码配置文件
return insert(sql,record.getId(),record.getNickname(),record.getEmail(),record.getPswd(),record.getCreateTime(),record.getLastLoginTime(),record.getStatus());-shiro密码配置文件
}
HashedCredentialsMatcher 实现密码验证服务
1、自定义JdbcRealm实现AuthorizingRealm接口,重写doGetAuthenticationInfo(,,,)方法。
[if !supportLists]2、[endif]配置ini文件内容
主要配置HashedCredentialsMatcher实现密码验证服务。
credentialsMatcher=org.apache.shiro.authc.credential.HashedCredentialsMatcher
credentialsMatcher.hashAlgorithmName=SHA-256#加密算法
credentialsMatcher.hashIterations=1#迭代次数
credentialsMatcher.storedCredentialsHexEncoded=true
jdbcRealm=com.shiro.test.JdbcRealm
jdbcRealm.credentialsMatcher=$credentialsMatcher
securityManager.realms=$jdbcRealm
3、]用邮箱、密码实现登录认证
4、结果