ITPub博客

首页 > > > Shiro和SpringMVC集成

Shiro和SpringMVC集成

作者:duanhao 时间:2019-07-17 16:22:31 0 删除 编辑

源代码:gitee.com/jiaodacailei/

核心概念

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











创建Maven-web项目

配置pom.xml

参考:

\shiro-web\pom.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/>


原文作者:;如有侵权,请联系管理员删除。

请登录后发表评论 登录
全部评论

注册时间:2019-09-06

  • 博文量
    739
  • 访问量
    25562