Shiro 与 SpringSecurity [关闭]

2024-05-06

我目前正在评估基于Java的安全框架,我是Spring 3.0用户,因此SpringSecurity似乎是正确的选择,但Spring安全性似乎过于复杂,它看起来似乎并没有使安全性更容易实现, Shiro 似乎更加连贯,也更容易理解。我正在寻找这两个框架之间的优缺点列表。


我也同意 Spring Security 感觉太复杂(对我来说)。当然,他们已经采取了一些措施来降低复杂性,例如创建自定义 XML 命名空间来减少 XML 配置的数量,但对我来说,这些并不能解决mySpring Security 的个人基本问题:它的名称和概念对我来说常常令人困惑。仅仅“得到它”是很难的。

然而,当你开始使用 Shiro 的那一刻,你就“明白了”。在安全领域中难以理解的事情变得更容易理解。 JDK 中难以使用的东西(例如密码)被简化到不仅可以忍受,而且通常使用起来很有趣的程度。

例如,如何在 Java 或 Spring Security 中对密码进行 hash+salt 加密并进行 base64 编码?两者都不如 Shiro 的解决方案那么简单直观:

ByteSource salt = new SecureRandomNumberGenerator().nextBytes();
new Sha512Hash(password, salt).toBase64();

不需要 commons-codec 或其他任何东西。只是四郎罐子。

现在就Spring环境而言,大多数Shiro开发人员都使用Spring作为他们的主要应用环境。这意味着 Shiro 的 Spring 集成非常出色,并且运行得非常好。您可以放心,如果您正在编写 Spring 应用程序,您将获得全面的安全体验。

例如,请考虑本线程另一篇文章中的 Spring XML 配置示例。下面是你在 Shiro 中(本质上)做同样事情的方法:

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd>

<bean id="shiroFilter" class="org.apache.shiro.spring.web.ShiroFilterFactoryBean">
    <property name="securityManager" ref="securityManager"/>
    <property name="loginUrl" value="/login.jsp"/>
    <property name="successUrl" value="/home.jsp"/>
    <property name="unauthorizedUrl" value="/unauthorized.jsp"/>
    <property name="filterChainDefinitions">
        <value>
        /secure/** = authc
        /** = anon
        </value>
    </property>
</bean>

<bean id="securityManager" class="org.apache.shiro.web.mgt.DefaultWebSecurityManager">
    <property name="realm" ref="myRealm"/>
</bean>

<bean id="myRealm" class="...">
    ...
</bean>

虽然比其他 Spring 示例稍微冗长,但在我看来更容易阅读。

您还会发现使用 Shiro 的过滤器链定义可能是定义通用过滤器链和基于 Web 的安全规则的最简单方法!比在 web.xml 中定义它们要好得多。

最后,Shiro 还提供了极高的“可插拔性”。您会发现,由于 Shiro 的 POJO/注入友好架构,您可以配置和/或替换几乎任何内容。 Shiro 将几乎所有内容默认为合理的默认值,您可以仅覆盖或配置您需要的内容。

归根结底,我认为选择这两者中的任何一个更多的是关于你的心理模型——这两者中哪一个对你来说更有意义、更直观?对于某些人来说,它会是 Shiro,对于其他人来说,它会是 Spring Security。 Shiro 在 Spring 环境中工作得很好,所以我想说根据您更喜欢这两个环境中的哪一个来选择,并且对您来说最有意义。

有关 Shiro 的 Spring 集成的更多信息:http://shiro.apache.org/spring.html http://shiro.apache.org/spring.html

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Shiro 与 SpringSecurity [关闭] 的相关文章

  • AES 加密 Java/plsql

    我需要在Java和plsql DBMS CRYPTO for Oracle 10g 上实现相同的加密 解密应用程序 两种实现都工作正常 但这里的问题是我对相同纯文本的加密得到了不同的输出 下面是用于加密 解密过程的代码 Java 和 PLS
  • 如何测试 JUnit 测试的 Comparator?

    我需要测试 Compare 方法 但我对如何测试感到困惑 我可以看看该怎么做吗 public class MemberComparator implements Comparator
  • IntelliJ IDEA 创建的 JAR 文件无法运行

    我在 IntelliJ 中编写了一个跨越几个类的程序 当我在 IDE 中测试它时它运行良好 但是 每当我按照教程将项目制作成 jar 可执行文件时 它就不会运行 双击 out 文件夹中的文件时 该文件不会运行 并显示 无法启动 Java J
  • 在浏览器中点击应用程序时播放框架挂起

    我正在 Play 中运行一个应用程序activator run 也许 5 次中有 3 次 它会挂起 当我去http localhost 9000 它就永远坐在那里旋转 我看到很多promise timed out错误也 我应该去哪里寻找这个
  • 如何在 Java 中禁用 System.out 以提高速度

    我正在用 Java 编写一个模拟重力的程序 其中有一堆日志语句 到 System out 我的程序运行速度非常慢 我认为日志记录可能是部分原因 有什么方法可以禁用 System out 以便我的程序在打印时不会变慢 或者我是否必须手动检查并
  • 如何为 Gson 编写自定义 JSON 反序列化器?

    我有一个 Java 类 用户 public class User int id String name Timestamp updateDate 我收到一个包含来自 Web 服务的用户对象的 JSON 列表 id 1 name Jonas
  • 一种使用 Java Robot API 和 Selenium WebDriver by Java 进行文件上传的解决方案

    我看到很多人在使用 Selenium WebDriver 的测试环境中上传文件时遇到问题 我使用 selenium WebDriver 和 java 也遇到了同样的问题 我终于找到了解决方案 所以我将其发布在这里希望对其他人有所帮助 当我需
  • 在具有相同属性名称的不同数据类型上使用 ModelMapper

    我有两节课说Animal AnimalDto我想用ModelMapper将 Entity 转换为 DTO 反之亦然 但是对于具有相似名称的一些属性 这些类应该具有不同的数据类型 我该如何实现这一目标 动物 java public class
  • 如何将文件透明地传输到浏览器?

    受控环境 IE8 IIS 7 ColdFusion 当从 IE 发出指向媒体文件 例如 mp3 mpeg 等 的 GET 请求时 浏览器将启动关联的应用程序 Window Media Player 我猜测 IIS 提供文件的方式允许应用程序
  • 使用 AWS Java SDK 为现有 S3 对象设置 Expires 标头

    我正在更新 Amazon S3 存储桶中的现有对象以设置一些元数据 我想设置 HTTPExpires每个对象的标头以更好地处理 HTTP 1 0 客户端 我们正在使用AWS Java SDK http aws amazon com sdkf
  • Java直接内存:在自定义类中使用sun.misc.Cleaner

    在 Java 中 NIO 直接缓冲区分配的内存通过以下方式释放 sun misc Cleaner实例 一些比对象终结更有效的特殊幻像引用 这种清洁器机制是否仅针对直接缓冲区子类硬编码在 JVM 中 或者是否也可以在自定义组件中使用清洁器 例
  • org.jdesktop.application 包不存在

    几天以来我一直在构建一个 Java 桌面应用程序 一切都很顺利 但是今天 当我打开Netbeans并编译文件时 出现以下编译错误 Compiling 9 source files to C Documents and Settings Ad
  • Tomcat 6找不到mysql驱动

    这里有一个类似的问题 但关于类路径 ClassNotFoundException com mysql jdbc Driver https stackoverflow com questions 1585811 classnotfoundex
  • 将 JSON 参数从 java 发布到 sinatra 服务

    我有一个 Android 应用程序发布到我的 sinatra 服务 早些时候 我无法读取 sinatra 服务上的参数 但是 在我将内容类型设置为 x www form urlencoded 之后 我能够看到参数 但不完全是我想要的 我在
  • 当单元格内的 JComboBox 中有 ItemEvent 时,如何获取 CellRow

    我有一个 JTable 其中有一列包含 JComboBox 我有一个附加到 JComboBox 的 ItemListener 它会根据任何更改进行操作 但是 ItemListener 没有获取更改的 ComboBox 所在行的方法 当组合框
  • 运行 Jar 文件时出现问题

    我已将 java 项目编译成 Jar 文件 但运行它时遇到问题 当我跑步时 java jar myJar jar 我收到以下错误 Could not find the main class myClass 类文件不在 jar 的根目录中 因
  • Keycloak - 自定义 SPI 未出现在列表中

    我为我的 keycloak 服务器制作了一个自定义 SPI 现在我必须在管理控制台上配置它 我将 SPI 添加为模块 并手动安装 因此我将其放在 module package name main 中 并包含 module xml 我还将其放
  • 如何测试 spring-security-oauth2 资源服务器安全性?

    随着 Spring Security 4 的发布改进了对测试的支持 http docs spring io spring security site docs 4 0 x reference htmlsingle test我想更新我当前的
  • android Accessibility-service 突然停止触发事件

    我有一个 AccessibilityService 工作正常 但由于开发过程中的某些原因它停止工作 我似乎找不到这个原因 请看一下我的代码并告诉我为什么它不起作用 public class MyServicee extends Access
  • java8 Collectors.toMap() 限制?

    我正在尝试使用java8Collectors toMap on a Stream of ZipEntry 这可能不是最好的想法 因为在处理过程中可能会发生异常 但我想这应该是可能的 我现在收到一个我不明白的编译错误 我猜是类型推理引擎 这是

随机推荐

  • Seaborn:带有背景颜色的图例

    以下问题解释了如何更改图例的背景颜色 matplotlib 图例背景颜色 https stackoverflow com questions 19863368 matplotlib legend background color 但是 如果
  • Kendo 模块和 RequireJS (r.js) 表现不佳。 (加载时出错)

    我在用Kendo UI版本2013 1 514 and RequireJS r js版本2 1 6 我的项目在标准下完美运行RequireJS按需加载 但是 当我尝试使用优化器时 任何 Kendo 都不会加载 包括其中任何一个都会引起著名和
  • idn_to_ascii():INTL_IDNA_VARIANT_2003 已弃用

    我正在为我的网站使用 codeigniter 框架 但在 form validation 中我收到错误 我按照 stackoverflow 中的此链接操作 但它对我不起作用 跟随链接 5 2 17 中的 idn to ascii https
  • Python - 查找图像中对象的中心

    我有一个具有白色背景和非白色对象的图像文件 我想使用 python Pillow 找到对象的中心 我在 C 中发现了类似的问题 但没有可接受的答案 如何找到物体的中心 https stackoverflow com questions 12
  • SoapCore Asp.net core 3.1 标头

    知道如何使用 SoapCore 为我的调用添加标头吗 到目前为止我所拥有的 在startup cs中 app UseSoapEndpoint
  • 在同一事务上读取和修改 - Bigtable

    我正在构建一个优惠券系统 并且正在使用 Bigtable 我的架构有两列 客户 ID 和优惠券代码 我想查询表以检查客户是否已存在 如果为真 则返回代码 如果为假 则使用 ID 修改客户 ID 单元格并返回代码 我看到 Bigtable 中
  • 如何在MacOS中的jupyter笔记本中显示所有可能的方法?

    我发现了类似的问题 但没有一个与我的问题相关MacOS 在 Jupyter Notebook 上显示所有可能的方法 https stackoverflow com questions 54636383 showing all possibl
  • 使用多线程的套接字服务器或文件服务器实现:概念不清楚

    请帮我理清这个概念 假设我们有一个使用线程实现的套接字端口服务器 套接字服务器侦听套接字端口 并在消息到达时创建一个线程来服务该请求 客户端代码向服务器发送给定数量的消息 该客户端代码也可以由多个用户在不同的计算机上运行 我知道客户端代码作
  • 无痛“算法分析”培训? [关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 我在大学时曾有过一次关于 算法分析 课程的痛苦经历 但最近发现在大学中需要它真实世界 无论如何 我正在
  • PCRE PHP “S”(模式的额外分析)修饰符的用法和实用性的具体示例?

    PHP 手册对 PCRE 的 S 模式的额外分析 修饰符进行了以下说明http php net manual en reference pcre pattern modifiers php http php net manual en re
  • Spring Data JPA NamedStoredProcedureQuery 多个输出参数

    我有一个简单的存储过程 用于测试 Spring Data JPA 存储过程功能 create or replace procedure plus1inout arg in int res1 out int res2 out int is B
  • 发布操作权限错误

    我在发布操作时遇到问题 我将publish actions添加到Items中 但出现如下错误 It looks like you haven t made any API requests to access content with th
  • 如何导出 ContourPlot3D 曲面并在 Excel、Originlab 或其他类似软件中重新生成

    我尝试过这个 但失败了 fig3D ContourPlot3D x 2 y 3 z 2 0 x 2 2 y 2 2 z 2 2 PlotPoints gt 100 pts InputForm fig3D 1 1 1 ListSurfaceP
  • 将 javascript 枚举键字符串转换为值

    在 JavaScript 代码中 我定义了以下枚举 MyMessageIds UndefinedId 0 FilenameId 1 BuildFileId 2 MovementArgsId 3 MoveId 4 ExecuteCommand
  • ASP.NET MVC 或 Ruby On Rails 哪个更快 [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • 将秒整数转换为 HH:MM,iPhone

    我正在为此苦苦挣扎 我想以 HH MM 格式在标签中显示一个以秒为单位的值 我在互联网上搜索了很长时间并找到了一些答案 但要么没有完全理解它们 要么它们看起来像是一种奇怪的做我想做的事情的方式 如果有人能帮助我解决这个问题 那就太好了 请记
  • 为多个 python 应用程序重用 Docker 镜像

    我对 Docker 的整个世界都很陌生 实际上 我正在尝试为不同的 python 机器学习应用程序建立一个环境 这些应用程序应该在自己的 docker 容器中相互独立地运行 由于我并不真正理解使用基础映像并尝试扩展这些基础映像的方式 因此我
  • 以 Vim 的 -o - 模式打开 Grep 输出中的文件

    如何将文件列表放入 Vim 的 o 模式 我有一个文件列表作为 Grep 的输出 我运行失败 1 grep il sid vim o 2 grep il sid xargs vim o 3 grep il sid xargs vim 4 v
  • ckeditor 4.5 fileUploadRequest 事件未触发

    我有一个 html id 为 id textarea 的文本区域 editor CKEDITOR inline id textarea filebrowserBrowseUrl browse url filebrowserUploadUrl
  • Shiro 与 SpringSecurity [关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 我目前正在评估基于Java的安全框架 我是Spring 3 0用户 因此SpringSecurity似乎是正确的选择 但Spring安全性似乎过