Spring Shiro配置实现用户认证和授权

1、applicationContext-shiro.xml配置:实现认证和授权

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
<!-- shiro start -->
  < bean id = "lifecycleBeanPostProcessor" class = "org.apache.shiro.spring.LifecycleBeanPostProcessor" />
  < bean id = "cacheManager" class = "org.apache.shiro.cache.ehcache.EhCacheManager" >
      < property name = "cacheManagerConfigFile"
          value = "classpath:ehcache.xml" />
  </ bean >
  < bean id = "credentialsMatcher"
      class = "org.apache.shiro.authc.credential.HashedCredentialsMatcher" >
      < property name = "hashAlgorithmName" value = "SHA-256" />
  </ bean >
  < bean id = "iniRealm" class = "com.boonya.shiro.security.CurrentIniRealm" >
      < constructor-arg type = "java.lang.String" value = "classpath:shiro.ini" />
      < property name = "credentialsMatcher" ref = "credentialsMatcher" />
  </ bean >
  < bean id = "userRealm" class = "com.boonya.shiro.security.UserRealm" />
  < bean id = "securityManager" class = "org.apache.shiro.web.mgt.DefaultWebSecurityManager" >
      < property name = "realms" >
          < list >
              < ref bean = "iniRealm" />
              < ref bean = "userRealm" />
          </ list >
      </ property >
      < property name = "cacheManager" ref = "cacheManager" />
  </ bean >
  < bean id = "shiroFilter" class = "org.apache.shiro.spring.web.ShiroFilterFactoryBean" >
      < property name = "securityManager" ref = "securityManager" />
      < property name = "loginUrl" value = "/login" />
      < property name = "successUrl" value = "/maps/main.html" ></ property >
      < property name = "unauthorizedUrl" value = "/unauthorized" ></ property >
      < property name = "filters" >
          < util:map >
              < entry key = "anAlias" >
                  < bean
                      class = "org.apache.shiro.web.filter.authc.PassThruAuthenticationFilter" />
              </ entry >
          </ util:map >
      </ property >
      < property name = "filterChainDefinitions" >
          < value >
              /unauthorized=anon
              /validate/code*=anon
              /login/**=anon
              /image/**=anon
              /js/**=anon
              /css/**=anon
              /common/**=anon
              /index.htm* = anon
              /maps/**=authc           
         </ value >
      </ property >
  </ bean >
  <!-- shiro end --> 说明:红色字体部分是对用户操作的URL进行过滤:认证或授权

2、shiro过滤器过滤属性含义

securityManager:这个属性是必须的

loginUrl :没有登录的用户请求需要登录的页面时自动跳转到登录页面,不是必须的属性,不输入地址的话会自动寻找项目web项目的根目录下的”/login.jsp”页面。

successUrl :登录成功默认跳转页面,不配置则跳转至”/”。如果登陆前点击的一个需要登录的页面,则在登录自动跳转到那个需要登录的页面。不跳转到此。

unauthorizedUrl :没有权限默认跳转的页面。

===============其权限过滤器及配置释义=======================

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
anon   org.apache.shiro.web.filter.authc.AnonymousFilter
 
authc  org.apache.shiro.web.filter.authc.FormAuthenticationFilter
 
authcBasic org.apache.shiro.web.filter.authc.BasicHttpAuthenticationFilter
 
perms  org.apache.shiro.web.filter.authz.PermissionsAuthorizationFilter
 
port   org.apache.shiro.web.filter.authz.PortFilter
 
rest   org.apache.shiro.web.filter.authz.HttpMethodPermissionFilter
 
roles  org.apache.shiro.web.filter.authz.RolesAuthorizationFilter
 
ssl    org.apache.shiro.web.filter.authz.SslFilter
 
user   org.apache.shiro.web.filter.authc.UserFilter
 
logout org.apache.shiro.web.filter.authc.LogoutFilter

anon:例子/admins/**=anon 没有参数,表示可以匿名使用。

authc:例如/admins/user/**=authc表示需要认证(登录)才能使用,没有参数

roles例子/admins/user/**=roles[admin],参数可以写多个,多个时必须加上引号,并且参数之间用逗号分割,当有多个参数时,例如admins/user/**=roles["admin,guest"],每个参数通过才算通过,相当于hasAllRoles()方法。

perms例子/admins/user/**=perms[user:add:*],参数可以写多个,多个时必须加上引号,并且参数之间用逗号分割,例如/admins/user/**=perms["user:add:*,user:modify:*"]当有多个参数时必须每个参数都通过才通过,想当于isPermitedAll()方法。

rest:例子/admins/user/**=rest[user],根据请求的方法,相当于/admins/user/**=perms[user:method] ,其中methodpostgetdelete等。

port:例子/admins/user/**=port[8081],当请求的url的端口不是8081是跳转到schemal://serverName:8081?queryString,其中schmal是协议httphttps等,serverName是你访问的host,8081url配置里port的端口,queryString

是你访问的url里的?后面的参数。

authcBasic例如/admins/user/**=authcBasic没有参数表示httpBasic认证

ssl:例子/admins/user/**=ssl没有参数,表示安全的url请求,协议为https

user:例如/admins/user/**=user没有参数表示必须存在用户,当登入操作时不做检查

注:anonauthcBasicauchcuser是认证过滤器,

permsrolessslrestport是授权过滤器

3、web.xml中shiroFilter配置

?
1
2
3
4
5
6
7
8
9
<!-- Shiro Filter is defined in the spring application context: -->
< filter >
    < filter-name >shiroFilter</ filter-name >
    < filter-class >org.springframework.web.filter.DelegatingFilterProxy</ filter-class >
</ filter >
< filter-mapping >
    < filter-name >shiroFilter</ filter-name >
    < url-pattern >/*</ url-pattern >
</ filter-mapping >
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Spring Boot 是一个用于创建独立运行的、基于 Spring 框架的 Java 应用程序的框架。它提供了自动配置和约定优于配置的方式,极大地简化了应用程序的开发过程。Shiro 是一个功能强大的开源安全框架,它提供了身份认证授权访问控制和会话管理等功能。 身份认证授权认证是现代应用程序中不可或缺的一部分。身份认证是确认用户的身份,确保用户有权访问系统内的资源。而授权认证则是根据用户的身份和角色,控制用户对资源的访问权限。这两个功能可以保证系统的安全性和用户隐私的保护。 在开发应用程序时,我们如何实现身份认证授权认证系统?这就是 Spring Boot 和 Shiro 的用武之地。通过结合使用 Spring Boot 和 Shiro,我们可以快速构建一个安全可靠的身份认证授权认证系统。Spring Boot 提供了简洁的开发方式,使得整个开发过程更加高效。而 Shiro 则具备了许多强大的功能,如支持多种身份认证方式和灵活的授权访问控制机制,可以满足各种复杂的业务需求。 使用 Spring Boot 和 Shiro 还带来了其他一些好处。首先,它们都是开源的框架,有着广泛的社区支持和优秀的文档资源。其次,它们都有良好的扩展性,可以方便地与其他框架和工具进行集成。最后,它们都是成熟稳定的,已经经受了时间和实践的考验,可以为我们的应用程序提供稳定可靠的安全保障。 综上所述,Spring Boot 和 Shiro 提供了实现身份认证授权认证系统的理想解决方案。它们的结合能够帮助我们快速构建一个安全可靠的应用程序,保护用户隐私和系统资源的安全。不论是大型企业应用还是小型个人项目,使用 Spring Boot 和 Shiro 都可以帮助我们轻松应对各种安全挑战。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值