Shiro登录校验
shiro是一种权限认证框架,实现一个简单的登录鉴权:
1、控制器层:
@Controller
@RequestMapping("/blogger")
public class BloggerController { @Resource
private BloggerService bloggerService; @RequestMapping("/login")
public String login(Blogger blogger,HttpServletRequest request){
//shiro身份验证
Subject subject = SecurityUtils.getSubject();
UsernamePasswordToken token = new UsernamePasswordToken(blogger.getUserName(), CryptographyUtil.md5(blogger.getPassword(), "123456"));
try {
subject.login(token); //身份认证
return "redirect:/admin/main.jsp";
} catch (Exception e) {
e.printStackTrace();
request.setAttribute("blogger", blogger);
request.setAttribute("errorInfo", "用户名或密码错误");
return "login";
}
} }
Subject,可以理解为当前的用户主体,Shiro的session机制摆脱了http session限制,在非web环境中使用企业级session管理进行session会话管理,SecurityUtils为单例的工具类,返回当前Subject对象。
token,最基本是用户名密码token,当然也可以自己拓展,构建token后调用Subject的login方法,提交token到realm的doGetAuthenticationInfo进行身份验证:
public class MyRealm extends AuthorizingRealm{
@Resource
private BloggerService bloggerService;
/**
* 获取用户信息的所有资料,如权限角色等.
*/
@Override
protected AuthorizationInfo doGetAuthorizationInfo(PrincipalCollection principals) {
return null;
}
/**
* 验证当前登录的用户
*/
@Override
protected AuthenticationInfo doGetAuthenticationInfo(AuthenticationToken token) throws AuthenticationException {
String userName = (String) token.getPrincipal();
Blogger blogger = bloggerService.getByUserName(userName);
if(blogger != null){ //存在该用户名
SecurityUtils.getSubject().getSession().setAttribute("currentUser", blogger);
AuthenticationInfo authcInfo = new SimpleAuthenticationInfo(blogger.getUserName(), blogger.getPassword(),"any");
return authcInfo;
}else{
return null;
}
}
}
这里拿到用户名后查询数据库获取正确的blogger登录对象,构建SimpleAuthenticationInfo认证信息对象,身份判别结果Shiro都会反映在异常中:
try {
subject.login(token); //身份认证
return "redirect:/admin/main.jsp";
} catch (Exception e) {
e.printStackTrace();
request.setAttribute("blogger", blogger);
request.setAttribute("errorInfo", "用户名或密码错误");
return "login";
}
这里统一用Exception异常表示用户判别失败,ok了。。。
Shiro登录校验的更多相关文章
- JavaWeb_day02_登录校验_查询所有员工信息_DeBug
本文为博主辛苦总结,希望自己以后返回来看的时候理解更深刻,也希望可以起到帮助初学者的作用. 转载请注明 出自 : luogg的博客园 谢谢配合! WEB_day02 servlet 协议转对象 服务器 ...
- Spring Security 登录校验 源码解析
传统情况下,在过滤器中做权限验证,Spring Secuirty也是在Filter中进行权限验证. 创建并注册过滤器 package com.awizdata.edubank.config; impo ...
- 类Shiro权限校验框架的设计和实现(2)--对复杂权限表达式的支持
前言: 我看了下shiro好像默认不支持复杂表达式的权限校验, 它需要开发者自己去做些功能扩展的工作. 针对这个问题, 同时也会为了弥补上一篇文章提到的支持复杂表示需求, 特地尝试写一下解决方法. 本 ...
- 使用Shiro登录成功后,跳转到之前访问的页面实现
转:http://blog.csdn.net/lhacker/article/details/20450855 很多时候,我们需要做到,当用户登录成功后,跳转回登录前的页面.如果用户是点击" ...
- MVC登录校验
利用MVC自带的过滤器可现实简单的登录校验 在项目目录下创建一个BaseController控制器,让需要验证的控制器继承这个BaseController 需要让BaseController继承Con ...
- vue-router登录校验后跳转到之前指定页面如何实现
两个需求:1.用户点击购买需要下单,并跳转到订单页面,但是如果用户没有登录的话,中间有登录验证,会拦截:2.点击购买的时候,登录校验成功了,跳转到订单页面时,订单已创建,去付款即可.3.处理拦截至登录 ...
- Shiro 登录认证源码详解
Shiro 登录认证源码详解 Apache Shiro 是一个强大且灵活的 Java 开源安全框架,拥有登录认证.授权管理.企业级会话管理和加密等功能,相比 Spring Security 来说要更加 ...
- Shiro登录中遇到了问题
Shiro登录中遇到了问题 记录二次开发中遇到的问题, 如果系统学习Shiro, 推荐跟我学Shrio. 问题 项目是要将验证从本地改为LDAP验证, 但是因为jeecms的验证和授权中, 用户和角色 ...
- 简单两步快速实现shiro的配置和使用,包含登录验证、角色验证、权限验证以及shiro登录注销流程(基于spring的方式,使用maven构建)
前言: shiro因为其简单.可靠.实现方便而成为现在最常用的安全框架,那么这篇文章除了会用简洁明了的方式讲一下基于spring的shiro详细配置和登录注销功能使用之外,也会根据惯例在文章最后总结一 ...
随机推荐
- chipmunk几何算法
/* Copyright (c) 2007 Scott Lembcke * * Permission is hereby granted, free of charge, to any person ...
- lua 5.3 英文手册 google机器翻译版
LUA Lua 5.3参考手册作者:Roberto Ierusalimschy,Luiz Henrique de Figueiredo,Waldemar Celes 版权所有©2015-2018 Lu ...
- 缺少libtool依赖导致编译安装失败
今天安装一个测试数据库的过程中,编译安装rlwrap工具时出错. 如下. [root@DB1 rlwrap-0.37]# ./configure checking build system type. ...
- MongoDB 学习笔记四 C#调用MongoDB
驱动 下载 https://github.com/mongodb/mongo-csharp-driver/downloads 项目地址: https://github.com/mongodb/mong ...
- esp32 blink实验
#include<stdio.h>#include"freertos/FreeRTOS.h"#include"freertos/task.h"#in ...
- Gsteramer 环境配置
安装命令: sudo add-apt-repository universe sudo add-apt-repository multiverse sudo apt-get update sudo a ...
- python学习,day3: 文件的读写
# coding=utf-8 # Author: RyAn Bi import sys f1 = open('yesterday2',mode='w',encoding='utf-8') #w 只能写 ...
- getLong not implemented for class oracle.jdbc.driver.T4CRowidAccessor
症状: SpringMVC+MyBatis向数据库插入数据,主键应用ORACLE中自己设置的自增序列会发生如下错误: nested exception is Java.sql.SQLException ...
- [USACO19FEB]Cow Dating
Luogu5242 通过观察数据,我们可以发现,右端点的取值是单调递增的.于是,我们可以极限一波,用一个双指针法,类似于队列. 右端点的取值满足以下公式: (1-p1)(1-p2)..(1-pn) * ...
- [转] watch 命令使用(linux监控状态)
[From] https://jingyan.baidu.com/article/495ba841c5a31738b30eded4.html 可以使用watch 命令设置执行间隔,去反复间隔一条命令或 ...