Servlet整合Shiro(四)上

简介: Servlet整合Shiro(四)

一. Shiro 配置文件的四大部分


在 shiro.ini 这个配置文件中, 有四个部分, [main], [users],[roles], 还有一个 [urls], 前面三个部分,我们都讲解了,只剩下一个 urls。 这儿进行讲解一下。


一. 一 [main] 部分


提供了对根对象securityManager及其依赖对象的配置。


如,前面的 jdbc 配置 和策略配置。


[main]
#配置数据源
dataSource=com.mchange.v2.c3p0.ComboPooledDataSource
#配置数据库的信息
dataSource.driverClass=com.mysql.jdbc.Driver
dataSource.jdbcUrl=jdbc:mysql://localhost:3306/shiro?characterEncoding=utf8
dataSource.user=root
dataSource.password=abc123
#配置 realm
jdbcRealm=org.apache.shiro.realm.jdbc.JdbcRealm
#配置数据源
jdbcRealm.dataSource=$dataSource
#注入多个realm 到securityManager里面
securityManager.realm=$jdbcRealm
#配置验证器
authenticationStrategy=org.apache.shiro.authc.pam.FirstSuccessfulStrategy
securityManager.authenticator.authenticationStrategy=$authenticationStrategy


在与 Servlet 进行整合时, [main] 部分也常常添加 如下两个部分:


authc.loginUrl=/User/toLogin
roles.unauthorizedUrl=/NoPermission/NoPermission
perms.unauthorizedUrl=/NoPermission/NoPermission


authc.loginUrl=/User/toLogin, 是配置没有通过认证时,跳转的页面, 通常是 登录页面


roles.unauthorizedUrl=/NoPermission/NoPermission 是没有配置要求的角色时跳转的页面, 通常是权限不足页面


perms.unauthorizedUrl=/NoPermission/NoPermission 是没有当前要求的权限时跳转的页面, 通常是权限不足页面。


一.二 [users] 部分


主要是配置用户的信息, 用户名=密码,角色1,角色2 … 角色可以省略。


[users]
#用户名=密码,角色1,角色2
yuejl=1234,role1,role3
yuezl=1234,role2


一.三 [roles] 部分


主要是配置角色与权限的信息, 角色=权限1,权限2


[roles]
role1=user:add,user:delete
role2=user:*
role3=user:select


一.四 [urls] 部分


配置 url 及相应的拦截器之间的关系, url=拦截器1[参数],拦截器2[参数]


[urls]
/static/**=anon
/User/toLogin=anon
/User/login=anon
/Main/toMain=authc
/User/add=authc,perms["user:add"]
/User/update=authc,perms["user:update"]
/User/select=authc,perms["user:select"]
/User/delete=authc,perms["user:delete"]


即 访问 /static/ 路径时, 被 anon 拦截器拦截,


访问 /Main/toMain 路径时,被 authc 拦截器拦截


访问 /User/add 路径时, 被authc 拦截器拦截,并且被拦截器 perms 拦截器 进行拦截


其中, anon, authc,perms 都是拦截器的别名缩写,分别代表着不同的功能。


二. Shiro 的拦截器


关于拦截器的详细使用,可以看 张开涛前辈写得文章: 第八章 拦截器机制——《跟我学Shiro》


Shiro 为了方便 认证和授权,提供了好多默认拦截器。


二.一 拦截器定义位置


拦截器 被定义在 org.apache.shiro.web.filter.mgt.DefaultFilter 类下。


 public enum DefaultFilter
 {
   anon(AnonymousFilter.class), 
   authc(FormAuthenticationFilter.class), 
   authcBasic(BasicHttpAuthenticationFilter.class), 
   logout(LogoutFilter.class), 
   noSessionCreation(NoSessionCreationFilter.class), 
   perms(PermissionsAuthorizationFilter.class), 
   port(PortFilter.class), 
   rest(HttpMethodPermissionFilter.class), 
  roles(RolesAuthorizationFilter.class), 
  ssl(SslFilter.class), 
  user(UserFilter.class);
  ... 
}


前面的 anon,authc 就是别名缩写, AnonymousFilter,FormAuthenticationFilter 是其对应的拦截器类。


二.二 各个拦截器的意义


image.png


image.png


image.png


可以通过 配置文件 来做一个简单的 小Demo. 由于还没有学习自定义Realm, 故先用配置文件的形式获取数据。


三. Servlet 整合 Shiro


三.一 添加依赖


需要添加 关于 shiro 的依赖,日志的依赖,还有tomcat 的依赖。 用到了 json,需要添加 json的依赖。


<dependencies>
    <!--tomcat中 jsp与 servlet依赖 -->
    <dependency>
      <groupId>javax.servlet.jsp</groupId>
      <artifactId>javax.servlet.jsp-api</artifactId>
      <version>2.3.1</version>
      <scope>provided</scope>
    </dependency>
    <dependency>
      <groupId>javax.servlet</groupId>
      <artifactId>javax.servlet-api</artifactId>
      <version>3.1.0</version>
      <scope>provided</scope>
    </dependency>
    <!-- jstl 与 standard 依赖-->
    <dependency>
      <groupId>javax.servlet</groupId>
      <artifactId>jstl</artifactId>
      <version>1.2</version>
    </dependency>
    <dependency>
      <groupId>taglibs</groupId>
      <artifactId>standard</artifactId>
      <version>1.1.2</version>
    </dependency>
    <dependency>
      <groupId>org.apache.shiro</groupId>
      <artifactId>shiro-all</artifactId>
      <version>1.2.2</version>
    </dependency>
    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>4.12</version>
    </dependency>
    <dependency>
      <groupId>org.slf4j</groupId>
      <artifactId>slf4j-log4j12</artifactId>
      <version>1.7.25</version>
    </dependency>
    <dependency>
      <groupId>commons-logging</groupId>
      <artifactId>commons-logging</artifactId>
      <version>1.2</version>
    </dependency>
  <dependency>
      <groupId>net.sf.json-lib</groupId>
      <artifactId>json-lib</artifactId>
      <version>2.4</version>
    </dependency>
    <dependency>
      <groupId>org.apache.commons</groupId>
      <artifactId>commons-lang3</artifactId>
      <version>3.1</version>
    </dependency>
    <dependency>
      <groupId>commons-collections</groupId>
      <artifactId>commons-collections</artifactId>
      <version>3.2.2</version>
   </dependency>
  </dependencies>
  <build>
     <plugins>
            <!-- 编译的jdk版本 -->
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>3.1</version>
                <configuration>
                    <source>1.8</source>
                    <target>1.8</target>
                </configuration>
            </plugin>
            <plugin>
        <groupId>org.apache.tomcat.maven</groupId>
        <!--tomcat的插件名, tomcat7-maven-plugin, 用的是tomcat7版本 -->
        <artifactId>tomcat7-maven-plugin</artifactId>
        <version>2.2</version>
        <configuration>
          <port>8080</port>  <!--tomcat的端口号 -->
          <path>/Shiro_Web</path> <!--tomcat的项目名 -->
          <uriEncoding>UTF-8</uriEncoding> <!-- 防止get 提交时乱码 -->
        </configuration>
      </plugin>
      </plugins>
  </build>


三.二 配置 web.xml


需要配置监听器,配置文件的路径,添加过滤器。


  <!-- 配置监听器 -->
 <listener>
   <listener-class>org.apache.shiro.web.env.EnvironmentLoaderListener</listener-class>
</listener>
<context-param>
   <param-name>shiroEnvironmentClass</param-name>
   <param-value>org.apache.shiro.web.env.IniWebEnvironment</param-value>
</context-param>
  <!-- 配置文件的路径 -->
    <context-param>
        <param-name>shiroConfigLocations</param-name>
        <param-value>classpath:shiro.ini</param-value>
    </context-param>
  <!-- 配置shiro 过滤器 -->
  <filter>
    <filter-name>ShiroFilter</filter-name>
    <filter-class>org.apache.shiro.web.servlet.ShiroFilter</filter-class>
  </filter>
  <filter-mapping>
    <filter-name>ShiroFilter</filter-name>
    <url-pattern>/*</url-pattern>
  </filter-mapping>


有的教程说,1.2版本以上不用配置过滤器,但没有配置时,老蝴蝶这项目运行报错,创建securityManager 报错,添加上就没有问题了。 故老蝴蝶这儿添加上shiro 过滤器。


三.三 编写配置文件 shiro.ini


[main]
#没有登录时,跳转到登录的路径
authc.loginUrl=/User/toLogin
#跳转到权限不足的路径
roles.unauthorizedUrl=/NoPermission/NoPermission
perms.unauthorizedUrl=/NoPermission/NoPermission
# 配置用户的信息
[users]
#用户名=密码,角色1,角色2
yuejl=1234,role1,role3
yuezl=1234,role2
# 定义角色的信息, 角色,权限, *表示全部的权限
[roles]
role1=user:add,user:delete
role2=user:*
role3=user:select
[urls]
#静态页面可以访问
/static/**=anon
#跳转到登录页面和登录方法可以访问
/User/toLogin=anon
/User/login=anon
#跳转到主页,需要认证
/Main/toMain=authc
#执行方法,不仅需要认证,还需要有相应的方法
/User/add=authc,perms["user:add"]
/User/update=authc,perms["user:update"]
/User/select=authc,perms["user:select"]
/User/delete=authc,perms["user:delete"]
#退出登录
/User/logout=logout


由于配置文件中,用的是 key=value, 所以在访问路径时,不能用以前的 /User?jsp=toLogin, 和 /User?method=login 了。


BaseServlet 不能使用了, 需要用原始的一个方法,一个Servlet的形式了。


yuejl 没有修改的权限, yuezl 具有全部的权限。



相关文章
|
前端开发 JavaScript Java
Servlet整合Shiro实现RBAC(七)下
Servlet整合Shiro实现RBAC(七)
145 0
Servlet整合Shiro实现RBAC(七)下
|
JSON 前端开发 数据库
Servlet整合Shiro实现RBAC(七)上
Servlet整合Shiro实现RBAC(七)
137 0
Servlet整合Shiro实现RBAC(七)上
|
前端开发 Java 数据安全/隐私保护
Servlet整合Shiro(四)下
Servlet整合Shiro(四)
125 0
Servlet整合Shiro(四)下
|
JSON 数据格式
Servlet整合Shiro(四)中
Servlet整合Shiro(四)
120 0
Servlet整合Shiro(四)中
|
2天前
|
Java
学院管理系统【JSP+Servlet+JavaBean】(Java课设)
学院管理系统【JSP+Servlet+JavaBean】(Java课设)
18 3
学院管理系统【JSP+Servlet+JavaBean】(Java课设)
|
2天前
|
Java
人事管理系统【JSP+Servlet+JavaBean】(Java课设)
人事管理系统【JSP+Servlet+JavaBean】(Java课设)
21 0
|
2天前
|
Java
排课系统【JSP+Servlet+JavaBean】(Java课设)
排课系统【JSP+Servlet+JavaBean】(Java课设)
16 5
|
2天前
|
Java
仓库管理系统【JSP+Servlet+JavaBean】(Java课设)
仓库管理系统【JSP+Servlet+JavaBean】(Java课设)
15 1
|
2天前
|
Java
学校教师管理系统【JSP+Servlet+JavaBean】(Java课设)
学校教师管理系统【JSP+Servlet+JavaBean】(Java课设)
13 2
|
2天前
|
开发框架 缓存 Java
JSP 教程 之 Eclipse JSP/Servlet 环境搭建 1
本教程指导如何使用Eclipse搭建JSP/Servlet开发环境。需下载Eclipse J2EE和Tomcat,将Tomcat解压至无中文和空格的D盘目录。启动Tomcat后,服务器运行,通过浏览器访问`http://localhost:8080/`。在Tomcat的webapps\ROOT目录创建test.jsp文件,输入代码并访问`http://localhost:8080/test.jsp`以验证环境配置成功。
7 1