zoukankan      html  css  js  c++  java
  • Shiro和SpringMVC集成

    源代码:https://gitee.com/jiaodacailei/shiro-springmvc-demo.git

    核心概念

    Shiro是一个Java权限框架,与之相对的有一个spring的框架:Spring Security

    创建Maven-web项目

    配置pom.xml

    参考:

    shiro-webpom.xml

    配置web.xml

    配置spring/springmvc/shiro,重点:

    配置spring

    src/main/resources/applicationContext.xml

    src/main/resources/spring-shiro-web.xml

    配置springmvc

    参考:springmvc-servlet.xml

    登录页和首页加载

    创建main.jsp和login.jsp

    MainController映射

    认证

    shiro的内部认证流程如下,如果看不明白,可以先略过,后面例子完成后再看。

    现在,我们要完成登录表单post提交到/login时,让shiro帮我们完成认证。当然,我们仍然需要编写认证的逻辑,在Realm中完成。

    在spring的shiro配置中,定义Realm

    src/main/resources/spring-shiro-web.xml

    需要在securityManager中注入自定义realm,此处为userRealm

    创建UserRealm类

    继承AuthorizingRealm,并重写获取认证信息的方法即可

    处理认证失败,需要在Controller中增加/login的Post映射:

    授权

    接着,我们要完成授权,实现admin用户登录系统可以看到用户、角色、菜单三个模块;而cai用户登录系统,则只能看到用户模块。

    修改UserRealm

    修改UserRealm,重写获取授权信息的方法即可

    验证权限

    需要修改main.jsp,采用shiro标签库验证权限,还没有多种权限认证方式,见后面的权限验证那一小节。

    还需要shiro标签库

    过滤器

    过滤器 作用
    anon 匿名过滤器:对应的url,无需任何认证即可访问,即,可以匿名访问。
    authc 表单认证过滤器:对应的url的get请求,验证用户是否登录,如果没有登录,则跳转登录页面;对应的url的post请求,会获取表单中的用户名和密码,调用用户提供的Realm的doGetAuthenticationInfo(AuthenticationToken token)进行认证,认证通过则返回首页。
    user 用户过滤器:对应的url请求,验证用户是否登录,如果没有登录则跳转登录页面,用户输入登录信息,登录成功后,回跳转回初次访问的url。
    logout 注销过滤器:将shiro中的用户注销,并返回首页

    User过滤器测试:

    当系统启动时,首先访问url: /2

    会跳转登录页,认证成功后,会跳回 /2

    获取用户

    在我们实际代码中,如何获取用户信息呢?

    例如,我们经常会在登录成功后将用户信息放在HttpSession中,在后续的请求中,就获取该用户信息,从而使用它。

    在Shiro中,我们可以通过SecurityUtils.getSubject().getPrincipal()获取当前用户信息:

    该用户信息是我们在UserRealm中设置的(红框中的内容):

    权限验证

    下面时shiro权限验证的内部流程,如果看不懂,可以先略过,后面完成例子之后再回过头来看。

    权限验证主要是指,当我们已经登录成功后,怎么判断当前用户有哪些权限,是什么角色?

    主要包含下面三种验证方式:

    Java编码方式验证权限

    SecurityUtils.getSubject().hasRole(“admin”)

    SecurityUtils.getSubject().isPermitted(“menu:view”)

    注解方式验证权限

    配置

    代码

    @RequireRoles

    @RequirePermissions

    测试

    分别使用admin和cai用户登录系统,然后分别访问/msg

    admin用户会看到true,cai用户没有权限:

    采用shiro的jsp标签库

    <shiro:hasPermission/>

    <shiro:hasRole/>

  • 相关阅读:
    产品分析之核心功能篇
    激励CEO们最好的办法就是鼓励他们不要停止思考
    Javascript的一些经验总结
    微信为什么跟你想要的不一样?
    互联网思维西游记漫画分享
    交互设计与人类行为习惯的一些思考
    说说三四月的app审核中的几个坑
    程序员的玻璃心
    常用网站日志分析软件使用总结
    在你决定从事iOS开发前需要清楚的几个问题
  • 原文地址:https://www.cnblogs.com/qfchen/p/11201718.html
Copyright © 2011-2022 走看看