Spring与Shiro整合 登陆操作

作者 : Stanley 罗昊

【转载请注明出处和署名,谢谢!】

编写登陆Controller方法

 讲解:

首先,如果你登陆失败的时候,它会把你的异常信息丢到一个叫shirologinFailure这个值里面,这个值对应上我们的请求作用域中,它的key值就是shirologinFailure;

我们从中可以获取到异常的名称(异常错误信息)我们用string来接收异常信息exceptionClassName,然后我们就可以开始判断,如果exceptionClassName !=null的时候,那就表明登陆失败了,登陆失败之后,我们就直接return “forward/login.jsp”;就直接给他跳转到登陆页面,让用户继续登陆;

那我们登陆成功呢?注意看下方注解:

该方法不处理登陆成功的情况,会自动帮我们跳转到上一个操作路径,所以登陆失败了就会进入到这个方法中返回一个登陆页面,如果成功,压根就不会进入这个方法,而是直接跳转到我们之前所保留的那个登陆路径;

登陆操作

当我们尝试登陆的时候,我们就会发现无法登陆,返回的内容却是用户名不存在;

因为,当我们登陆的时候,shiro会首先通过我们自定义的Realm进行操作【也就是我们编写的UserRealm类】,我们在下方可以看到//认证操作,该方法返回的结果是null,null的意思就是找不到用户信息,比如我们刚才在文本框输入用户名:zhangsan,这个时候我们查询不出来,就从该认证器中返回一个null告诉用户,找不到;

所以,我们接下来需要把认证器补充完整;

我们可以看到该方法有一个参数token,没错,我们就是要通过这个token来获取我们前端用户传过来的用户名(UserName),然后去我们数据库中进行查询对比;对比下你是否拥有这个用户,如果有的话,我就直接把它返回就可以了;

接下来,我们就需要从token中获取登陆的用户名(用户填写的文本框中的值),查询数据库返回用户信息;那我们要怎样获取用户Name呢》其实非常简单:

String username = (String) token.getPrincipal();//用来获取用户名

接下来,我们拿到这个用户名后,我们就可以进行dao【Mybiats就是Mapper来完成操作】的JDBC操作了,因为我们用的是Spring环境,我们就可以通过依赖注入的方式来进行操作,我们直接将登陆的接口注入进来,将获取到的用户名直接丢进去即可;具体步骤:

1.我们在Dao【Mapper层】中找到User这个接口层并且编写接口:User getUserByUsername(String username);//获取用户对象,通过用户名查询获取;

2.在Service层重写Mapper结构并编写实现类impl,直接调Mapper层中的登陆接口,直接retrun方法;

 @Autowired
private UserMapper userMapper; public User getUserByUsername(String username){
return userMapper.getUserByUsername(username);
}

2.Sql语句:Select * From user(表名) where username = ?;查询返回我们的User对象【Mybiats在.xml文件中编写Sql】;

3.使用依赖注入,将Service注入到授权器中;

        String username = (String) token.getPrincipal();//用来获取用户名
User user = userService.getUserByUsername(username);

4.判断

if (ObjectUtils.isEmpty(user){
//如果用户名不存在,直接返回null即可
return null;
}else{
//如果该用户存在
/**
* 1.用户对象
* 2.用户对应的密码,将数据库密码返回,Shiro会自动判断
* 3.上方定义的Realm名字(当前自定义Realm的名称)
*/
return new SimpleAuthenticationInfo(user,user.getpassword,getName);
}

Spring与Shiro整合 登陆操作的更多相关文章

  1. Spring与Shiro整合 静态注解授权

    Spring与Shiro整合 静态注解授权 作者 : Stanley 罗昊 [转载请注明出处和署名,谢谢!] 使用Shiro的种类 首先,Shiro的授权方式共有三种: 1.编程式授权(不推荐) 2. ...

  2. Spring集成shiro做登陆认证

    一.背景 其实很早的时候,就在项目中有使用到shiro做登陆认证,直到今天才又想起来这茬,自己抽空搭了一个spring+springmvc+mybatis和shiro进行集成的种子项目,当然里面还有很 ...

  3. Spring与Shiro整合 加载权限表达式

    Spring与Shiro整合 加载权限表达式 作者 : Stanley 罗昊 [转载请注明出处和署名,谢谢!] 如何加载权限表达式  我们在上章内容中画了一张图,里面有三个分项,用户 角色 权限: 那 ...

  4. Spring与Shiro整合

    Spring整合篇--Shiro 作者 : Stanley 罗昊 [转载请注明出处和署名,谢谢!] 什么是Shiro? 链接:https://www.cnblogs.com/StanleyBlogs/ ...

  5. Spring mvc shiro 整合

    参考 : http://www.360doc.com/content/14/0722/10/18637323_396209195.shtml http://www.360doc.com/content ...

  6. Spring+SpringMVC+Hibernate 与 shiro 整合步骤

    目录 1. 业务需求分析 2. 创建数据库 3. 创建 maven webapp 工程 4. 创建实体类(POJO) 5. 配置 Hibernate 和 Mapping 5.1 Hibernate 主 ...

  7. Spring Boot:整合Shiro权限框架

    综合概述 Shiro是Apache旗下的一个开源项目,它是一个非常易用的安全框架,提供了包括认证.授权.加密.会话管理等功能,与Spring Security一样属基于权限的安全框架,但是与Sprin ...

  8. spring boot shiro redis整合基于角色和权限的安全管理-Java编程

    一.概述 本博客主要讲解spring boot整合Apache的shiro框架,实现基于角色的安全访问控制或者基于权限的访问安全控制,其中还使用到分布式缓存redis进行用户认证信息的缓存,减少数据库 ...

  9. Shiro整合Spring

    首先需要添加shiro的spring整合包. 要想在WEB应用中整合Spring和Shiro的话,首先需要添加一个由spring代理的过滤器如下: <!-- The filter-name ma ...

随机推荐

  1. QlikSense 2018.2月版起支持主题开发

    自定义主题开发 // 主题是qliksense 2018年2月版提出,4月版正式实施,其实就是去修改sense默认的.json文件和.css文件 { // 定义自定义主题是否从默认主题(Sense C ...

  2. SpringBoot整合MybatisPlus3.X之Sequence(二)

    数据库脚本 DELETE FROM user; ​ INSERT INTO user (id, name, age, email) VALUES (, , 'test1@baomidou.com'), ...

  3. Java 高并发之魂

    前置知识 了解Java基本语法 了解多线程基本知识 知识介绍 Synchronized简介:作用.地位.不控制并发的后果 两种用法:对象锁和类锁 多线程访问同步方法的7种情况:是否是static.Sy ...

  4. 大前端技术系列:TWA技术+TensorFlow.js => 集成原生和AI功能的app

    大前端技术系列:TWA技术+TensorFlow.js => 集成原生和AI功能的app ( 本文内容为melodyWxy原作,git地址:https://github.com/melodyWx ...

  5. [Spark]Spark-sql与hive连接配置

    一.在Mysql中配置hive数据库 创建hive数据库,刷新root用户权限 create database hive; grant all on *.* to root@'; flush priv ...

  6. 「Usaco2012 Dec」第一(字典树+拓扑排序)

    (我恨字符串) 惯例化简题目:给定n个字符串,可以改变字符的相对大小(在字典序中的大小),问:字符串i是否能成为最小的字符串(字典序) 解题过程: 首先你可以预处理出来26的全排列然后暴力然后你只要用 ...

  7. P2934 [USACO09JAN]安全出行

    图论瞎搞...... solution: 按例化简:给定一个无向图,保证单源最短路唯一,求每个点到1号点的最短路最后一条边被封锁的情况下的最短路 乍一看,应该是次短路,但是稍微用脚趾头想想都能发现不是 ...

  8. postman-接口间数据传递

    接口间数据传递 在我们做接口测试过程中会经常碰到使用上一个接口返回数据的情况,jmeter中可通过正则表达式提取,postman中如何提取呢?我们来看实例,这里使用的同一个接口来演示. ​ 我们提取出 ...

  9. 解决mybatis中 数据库column 和 类的属性名property 不一致的两种方式

    解决方式way1:resultMap (1)studentMapper.xml <!-- 当数据库的字段名 和 类的属性名 不一致的时候的解决方式:2种 way1--> <selec ...

  10. Springboot 自动配置浅析

    Introduction 我们知道,SpringBoot之所以强大,就是因为他提供了各种默认的配置,可以让我们在集成各个组件的时候从各种各样的配置文件中解放出来. 拿一个最普通的 web 项目举例.我 ...