`

Shiro集成web

阅读更多
1. Shiro集成Web配置

<!-- 添加shiro支持 -->
<listener>
    <listener-class>org.apache.shiro.web.env.EnvironmentLoaderListener</listener-class>
</listener>
<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>

create maven project -->
maven-archetype-webapp -->
    GroupId: com.andrew.shiro
    Artifact Id: ShiroWeb
    Package: com.andrew.shiro

jdk版本修改为1.8


src/main/java/com/andrew/servlet/AdminServlet.java

package com.andrew.servlet;
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class AdminServlet extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        System.out.println("admin do get");
    }
    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        System.out.println("admin do post");
    }
}

src/main/java/com/andrew/servlet/LoginServlet.java

package com.andrew.servlet;
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.shiro.SecurityUtils;
import org.apache.shiro.authc.UsernamePasswordToken;
import org.apache.shiro.subject.Subject;
public class LoginServlet extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        System.out.println("login doget");
        req.getRequestDispatcher("login.jsp").forward(req, resp);
    }
    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        System.out.println("login dopost");
        String userName = req.getParameter("userName");
        String password = req.getParameter("password");
        Subject subject = SecurityUtils.getSubject();
        UsernamePasswordToken token = new UsernamePasswordToken(userName, password);
        try {
            subject.login(token);
            resp.sendRedirect("success.jsp");
        } catch (Exception e) {
            e.printStackTrace();
            req.setAttribute("errorInfo", "用户名或者密码错误");
            req.getRequestDispatcher("login.jsp").forward(req, resp);
        }
    }
}

src/main/resources/log4j.properties

log4j.rootLogger=DEBUG, Console
#Console  
log4j.appender.Console=org.apache.log4j.ConsoleAppender  
log4j.appender.Console.layout=org.apache.log4j.PatternLayout  
log4j.appender.Console.layout.ConversionPattern=%d [%t] %-5p [%c] - %m%n  
log4j.logger.java.sql.ResultSet=INFO  
log4j.logger.org.apache=INFO  
log4j.logger.java.sql.Connection=DEBUG  
log4j.logger.java.sql.Statement=DEBUG  
log4j.logger.java.sql.PreparedStatement=DEBUG  

src/main/webapp/WEB-INF/shiro.ini

[main]
authc.loginUrl=/login
roles.unauthorizedUrl=/unauthorized.jsp
perms.unauthorizedUrl=/unauthorized.jsp
[users]
andrew=123456,admin
teacher1=123,teacher
student1=123
student2=456
[roles]
admin=user:*
teacher=student:*
[urls]
/login=anon
/admin=authc
/student=roles[teacher]
/teacher=perms["user:create"]

src/main/webapp/WEB-INF/web.xml

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" id="WebApp_ID" version="2.5">
  <display-name>ShrioWeb</display-name>
  <welcome-file-list>
    <welcome-file>index.html</welcome-file>
    <welcome-file>index.htm</welcome-file>
    <welcome-file>index.jsp</welcome-file>
    <welcome-file>default.html</welcome-file>
    <welcome-file>default.htm</welcome-file>
    <welcome-file>default.jsp</welcome-file>
  </welcome-file-list>
  
    <!-- 添加shiro支持 -->
    <listener>
       <listener-class>org.apache.shiro.web.env.EnvironmentLoaderListener</listener-class>
    </listener>
    <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>
    <servlet>
        <servlet-name>loginServlet</servlet-name>
        <servlet-class>com.andrew.servlet.LoginServlet</servlet-class>
    </servlet>
    <servlet-mapping>
        <servlet-name>loginServlet</servlet-name>
        <url-pattern>/login</url-pattern>
    </servlet-mapping>
    <servlet>
        <servlet-name>adminServlet</servlet-name>
        <servlet-class>com.andrew.servlet.AdminServlet</servlet-class>
    </servlet>
    <servlet-mapping>
        <servlet-name>adminServlet</servlet-name>
        <url-pattern>/admin</url-pattern>
    </servlet-mapping>
</web-app>

index.jsp

<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
    pageEncoding="ISO-8859-1"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>Insert title here</title>
</head>
<body>
hello World!
</body>
</html>

login.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
<form action="login" method="post">
    userName:<input type="text" name="userName"/><br/>
    password:<input type="password" name="password"/><br/>
    <input type="submit" value="登录"/>
</form>
</body>
</html>

success.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
欢迎你!
</body>
</html>

unauthorized.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
认证未通过,或者权限不足
</body>
</html>

运行结果:

未登录
http://localhost:8080/ShiroWeb/admin
http://localhost:8080/ShiroWeb/student
http://localhost:8080/ShiroWeb/teacher
运行结果:
跳转到 http://localhost:8080/ShiroWeb/login

student2 456 login
http://localhost:8080/ShiroWeb/admin
正常
http://localhost:8080/ShiroWeb/student
http://localhost:8080/ShiroWeb/teacher
调转到 http://localhost:8080/ShiroWeb/unauthorized.jsp
认证未通过,或者权限不足

teacher01 123 login
http://localhost:8080/ShiroWeb/admin
http://localhost:8080/ShiroWeb/student
正常
http://localhost:8080/ShiroWeb/teacher
调转到 http://localhost:8080/ShiroWeb/unauthorized.jsp
认证未通过,或者权限不足

andrew 123456 login
http://localhost:8080/ShiroWeb/admin
http://localhost:8080/ShiroWeb/student
正常
http://localhost:8080/ShiroWeb/teacher
调转到 http://localhost:8080/ShiroWeb/unauthorized.jsp
认证未通过,或者权限不足


2. Shiro集成Web具体使用

Url匹配方式
? 匹配一个字符/admin?可以匹配/admin1 /admin2但是不能匹配/admin12 /admin
* 匹配零个或者一个或者多个字符/admin*可以匹配/admin /admin1 /admin12但是不能匹配/admin/abc
** 匹配零个或者多个路径/admin/** 可以匹配/admin /admin/a /admin/a/b


3. Shiro标签使用

<shiro:hasRole name="admin">
	欢迎有admin角色的用户!<shiro:principal/>
</shiro:hasRole>
<shiro:hasPermission name="student:create">
	欢迎有student:create权限的用户!<shiro:principal/>
</shiro:hasPermission>


4. Shiro会话机制

Session session = subject.getSession();
System.out.println("sessionId:" + session.getId());
System.out.println("sessionHost:" + session.getHost());
System.out.println("sessionTimeout:" + session.getTimeout());
分享到:
评论

相关推荐

    shiroweb案例

    Shiro 集成 Web 应用** 在 Web 开发中,Shiro 可以与 Servlet 框架如 Spring MVC 结合使用,实现安全控制。以下是一般步骤: - **配置 Shiro Filter**:在 `web.xml` 文件中配置 Shiro 的 `Filter`,如 `shiro...

    Shiro集成OAuth2

    Apache Shiro是一个强大的Java安全框架,它提供了身份验证、授权、会话管理和加密等功能,而OAuth2则是一种开放...总之,Shiro集成OAuth2可以提供更高级别的安全性和用户体验,是现代Web应用中常见的一种安全解决方案。

    Shiro 视频教程+源码+课件

    Apache Shiro 是目前使用率较高的一个 Java 安全框架。本视频基于 Shiro 的新版本 ...2.Shiro 集成 Web 具体使用 3.Shiro 标签使用 4.Shiro 会话机 5.自定义 Realm 第五章 加密 1.shiro 加密解密 2.shiro 加密应用

    shiro-web api

    shiro web集成方向api,chm格式的。

    shiro和web整合实例

    通过学习和理解这些文件,开发者能够更好地掌握如何在实际项目中集成 Shiro 并实现完整的权限管理。 总之,Apache Shiro 作为 Java 安全框架,为 Web 开发提供了便捷的安全解决方案。通过合理的配置和定制,可以...

    shiro和web项目整合代码下载

    "shiro和web项目整合代码下载"这个主题表明我们将探讨如何在Spring MVC框架下集成Apache Shiro,以及实现一些常见的安全功能。 首先,Shiro的核心组件包括Subject、SecurityManager、Realms和Cryptography。Subject...

    spring、springmvc、shiro集成空框架

    总的来说,Spring、SpringMVC和Shiro的集成为空框架提供了一个坚实的基础,开发者可以在此基础上快速搭建企业级应用,提高开发效率并保证系统的安全性。理解这三个框架的核心概念和它们之间的协作方式,对于Java Web...

    shiro与spring web 项目集成.pdf

    本指南将详细探讨Shiro与Spring Web项目集成的过程,并分析Shiro在其中的作用和集成的关键点。 ### 1. Shiro与Spring框架的整合 Shiro与Spring Web项目的整合,首先需要在Spring项目中整合Shiro。整合的过程可以...

    web项目集成shirodemo

    "web项目集成shirodemo" 指的是一个Web应用程序项目,它已经集成了Apache Shiro安全框架。Apache Shiro是一个强大且易用的Java安全框架,处理认证、授权、加密和会话管理。这个项目可能是为了展示如何在Web环境中...

    单点登录CAS与权限管理框架Shiro集成

    ### 单点登录CAS与权限管理框架Shiro集成 #### 一、概述 单点登录(Single Sign-On,简称SSO)是一种常见的身份验证技术,它允许用户通过一次登录即可访问多个应用程序和服务。这种机制提高了用户体验,同时也简化...

    shiro-web-master.zip

    "shiro-web-master"暗示了我们还会接触到如何在Spring Boot或其它Web框架中集成Shiro。这通常涉及配置Shiro过滤器链,如`authc`(认证过滤器)、`perms`(权限过滤器)等,以实现URL级别的访问控制。 7. **实战...

    shiro-redis集成的spring的web项目

    在IT行业中,Shiro、Redis和Spring的集成是构建高效、安全Web应用的常见实践。本项目是一个将Apache Shiro与Redis缓存系统整合到Spring框架中的实例,旨在提升应用程序的安全性和性能。以下是对这个项目及其相关技术...

    Shiro自学笔记

    #### Shiro集成Web配置 1. 添加Shiro的Maven依赖。 2. 配置Web.xml,添加Shiro Filter。 3. 配置Shiro的ini配置文件,定义 Realm、安全策略等。 #### Shiro集成Web 1. 在Servlet容器中配置Shiro Filter。 2. 使用`@...

    shiro-web.zip

    3. **Spring AOP集成**:Shiro的授权可以通过Spring AOP实现,通过定义切面来执行权限检查。 4. **Session管理**:Shiro可以接管Spring MVC的Session管理,提供跨域session支持,或者使用缓存来优化session性能。 ...

    ssm集成redis和shiro

    SSM(Spring、SpringMVC、MyBatis)是一个经典的Java web开发框架组合,而Redis是内存数据库,常用于缓存和会话管理,Shiro则是一个强大的安全框架,负责认证、授权、会话管理和安全控制。下面我们将深入探讨如何在...

    struts2与shiro集成(实例)

    总之,Struts2和Shiro的集成为Java Web应用提供了强大的用户管理和权限控制功能,而H2数据库可以作为数据存储,帮助我们快速地搭建和测试环境。通过理解这两个框架的核心概念和集成方式,开发者可以更好地实现安全的...

    shiro教程共享

    此外,JSP标签也是Shiro集成Web应用时使用的一部分功能。 会话管理是Shiro框架的另一个核心功能,包括了对会话的创建、管理、存储和销毁。Shiro的会话管理器可以配置不同的会话监听器、会话存储方式及会话验证机制...

    shiro-web.rar

    6. **Shiro与Servlet容器的集成**: - 在web.xml中配置Shiro的Filter,如`Filter-name: shiroFilter`,然后指定其初始化参数,如`filter-class: org.apache.shiro.web.servlet.ShiroFilter`,以及相应的配置文件...

    springboot集成freemarker和shiro框架

    总的来说,SpringBoot集成FreeMarker和Shiro可以让我们轻松地构建出一个具备用户认证、授权功能的Web应用。通过FreeMarker的模板机制,我们可以灵活地控制页面显示,而Shiro则为我们提供了强大的安全防护。理解并...

    spring boot与shiro集成demo

    将Spring Boot与Shiro集成,能够构建出安全且易于维护的Web应用。本文将详细介绍如何在Spring Boot项目中整合Shiro,实现用户登录、权限控制等功能。 **1. 添加依赖** 首先,在Spring Boot的`pom.xml`文件中添加...

Global site tag (gtag.js) - Google Analytics