文档章节

Shiro登录校验

c
 caiyezi
发布于 2016/11/08 20:24
字数 381
阅读 18
收藏 0
点赞 0
评论 0

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了。。。

本文转载自:http://www.cnblogs.com/vipzhou/p/5444397.html

共有 人打赏支持
c
粉丝 1
博文 108
码字总数 0
作品 0
西安
程序员
如何让spring mvc拦截器比shiro拦截器先执行?

如何让spring mvc拦截器比shiro拦截器先执行? shiro我只想用他的权限验证功能,我用自己的拦截器判断是否要给shiro存权限数据还是验证权限。 我也不需要shiro的登录和重定向,我需要按照业务...

學楽
2016/12/27
611
5
在 Web 项目中应用 Apache Shiro 开源权限框架

Apache Shiro 是功能强大并且容易集成的开源权限框架,它能够完成认证、授权、加密、会话管理等功能。认证和授权为权限控制的核心,简单来说,“认证”就是证明你是谁? Web 应用程序一般做法...

IBMdW
2013/02/05
19.1K
38
基于权限安全框架Shiro的登录验证功能实现

目前在企业级项目里做权限安全方面喜欢使用Apache开源的Shiro框架或者Spring框架的子框架Spring Security。 Apache Shiro是一个强大且易用的Java安全框架,执行身份验证、授权、密码学和会话管...

Javahih
2017/11/11
0
0
Apache Shiro 开源权限框架

用户权限模型 在揭开 Shiro 面纱之前,我们需要认知用户权限模型。本文所提到用户权限模型,指的是用来表达用户信息及用户权限信息的数据模型。即能证明“你是谁?”、“你能访问多少 受保护...

村长大神
2016/10/20
37
0
cas+shiro+spring 单点登录

最近公司在搞单点登录,之前也做过,用的是58同城的wf框架,基于cas 的原理用拦截器自己写的一套。目前用cas+shiro+springmvc的框架,在网上参照张开涛的跟我学shiro http://jinnianshilong...

熊大熊二
2016/04/14
2.4K
3
在 Web 项目中应用 Apache Shiro

用户权限模型 在揭开 Shiro 面纱之前,我们需要认知用户权限模型。本文所提到用户权限模型,指的是用来表达用户信息及用户权限信息的数据模型。即能证明“你是谁?”、“你能访问多少受保护资...

BenettX
2013/08/28
0
0
在 Web 项目中应用 Apache Shiro

用户权限模型 在揭开 Shiro 面纱之前,我们需要认知用户权限模型。本文所提到用户权限模型,指的是用来表达用户信息及用户权限信息的数据模型。即能证明“你是谁?”、“你能访问多少受保护资...

heroShane
2014/02/09
0
3
shiro不跳转successUrl的问题

最近遇到shiro校验框架成功后不进行自动跳转到指定页面; 相关配置如下: <bean id="shiroFilter" class="org.apache.shiro.spring.web.ShiroFilterFactoryBean"><property name="securityMa......

Martin_Luo
2012/08/13
0
3
Apache Shiro简单示例

1、新建一个Maven的war工程,并在pom.xml中增加如下依赖。 <dependency> <groupId>org.springframework</groupId> <artifactId>spring-web</artifactId> <version>4.0.9.RELEASE</version></......

脚下的节奏
2015/07/12
0
0
Shiro权限控制框架入门2:如何将Shiro非入侵地整合到SpringMVC等Web项目中

前言:我在上一篇文章(PS:https://www.zifangsky.cn/770.html)中介绍了shiro框架的一些基本概念以及自定义Realm可以实现的自定义授权和认证的目的。在这一篇文章中我将介绍如何将Shiro与S...

pangfc
2017/01/06
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

python里求解物理学上的双弹簧质能系统

物理的模型如下: 在这个系统里有两个物体,它们的质量分别是m1和m2,被两个弹簧连接在一起,伸缩系统为k1和k2,左端固定。假定没有外力时,两个弹簧的长度为L1和L2。 由于两物体有重力,那么...

wangxuwei
16分钟前
0
0
apolloxlua 介绍

##项目介绍 apolloxlua 目前支持javascript到lua的翻译。可以在openresty和luajit里使用。这个工具分为两种模式, 一种是web模式,可以通过网页使用。另外一种是tool模式, 通常作为大规模翻...

钟元OSS
23分钟前
0
0
Mybatis入门

简介: 定义:Mybatis是一个支持普通SQL查询、存储过程和高级映射的持久层框架。 途径:MyBatis通过XML文件或者注解的形式配置映射,实现数据库查询。 特性:动态SQL语句。 文件结构:Mybat...

霍淇滨
31分钟前
0
0
开发技术瓶颈期,如何突破

前言 读书、学习的那些事情,以前我也陆续叨叨了不少,但总觉得 “学习方法” 就是一个永远在路上的话题。个人的能力、经验积累与习惯方法不尽相同,而且一篇文章甚至一本书都很难将学习方法...

_小迷糊
32分钟前
0
0
安装tensorflow-XXX报错

报错: tensorflow-0.5.0-cp27-none-linux_x86_64.whl is not a supported wheel on this platform. 解决: wget https://bootstrap.pypa.io/get-pip.py sudo python2.7 get-pip.py sudo p......

Yao--靠自己
35分钟前
0
0
JVM学习手册(一):JVM模型

一直从事JAVA开发,天天和JVM打交道,仔细想想对JVM还真的不是特别了解,实在是不应该.周六看了许多资料,也算有点心得,记录一下。 JVM内存模型分为5个区域:方法区,堆,虚拟机栈,本地方法栈,程序计...

勤奋的蚂蚁
57分钟前
0
0
转行零基础该如何学Python?这些一定要明白!

转行零基础学Python编程开发难度大吗?从哪学起?近期很多小伙伴问我,如果自己转行学习Python,完全0基础能否学会呢?Python的难度到底有多大?今天,小编就来为大家详细解读一下这个问题。...

猫咪编程
57分钟前
2
0
205. Isomorphic Strings - LeetCode

Question 205. Isomorphic Strings Solution 题目大意:判断两个字符串是否具有相同的结构 思路:构造一个map,存储每个字符的差,遍历字符串,判断两个两个字符串中相同位置字符的差是否相同 Ja...

yysue
今天
0
0
聊聊EurekaRibbonClientConfiguration

序 本文主要研究一下EurekaRibbonClientConfiguration EurekaRibbonClientConfiguration spring-cloud-netflix-eureka-client-2.0.0.RELEASE-sources.jar!/org/springframework/cloud/netfl......

go4it
今天
1
0
NoSQL

一、NoSQL介绍 1、NoSQL介绍 NoSQL属于非关系型数据,mysql属于关系型数据库。 对于关系型数据库来说,是需要把数据存储到库、表、行、字段里,查询的时候根据条件一行一行地去匹配,当数据量...

人在艹木中
今天
1
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部