小小千想和您聊一聊

当前位置: 首页> 技术分享> Shiro和SpringMVC集成

Shiro和SpringMVC集成

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

  1. 核心概念

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

  2. 创建Maven-web项目

  2.1. 配置pom.xml

  参考:

  \shiro-web\pom.xml

  2.2. 配置web.xml

  配置spring/springmvc/shiro,重点:

  2.3. 配置spring

  src/main/resources/applicationContext.xml

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

  2.4. 配置springmvc

  参考:springmvc-servlet.xml

  3. 登录页和首页加载

  3.1. 创建main.jsp和login.jsp

  3.2. MainController映射

  4. 认证

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

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

  4.1. 在spring的shiro配置中,定义Realm

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

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

  4.2. 创建UserRealm类

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

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

  5. 授权

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

  5.1. 修改UserRealm

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

  5.2. 验证权限

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

  还需要shiro标签库

  6. 过滤器


  User过滤器测试:

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

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

  7. 获取用户

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

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

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

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

  8. 权限验证

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

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

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

  8.1. Java编码方式验证权限

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

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

  8.2. 注解方式验证权限

  8.2.1. 配置

  8.2.2. 代码

  @RequireRoles

  @RequirePermissions

  8.3. 测试

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

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

  8.4. 采用shiro的jsp标签库


上一篇:HTML5工具初识之网页编辑器

下一篇:Spring框架之AOP原理动态代理

QQ技术交流群

千锋Java开发官方①群
811099962

加入群聊