Spring Security 3.1.0 - 无法从 HTTPS 切换到 HTTP

2024-04-17

我是 Spring Security 的新手,所以我制作了一个小型 Web 应用程序,以便尝试它并找到对我正在从事的项目有用的配置。 我强制通过 HTTPS 访问登录页面,登录后需要切换回 HTTP。换句话说:

  • 登录页面:仅限 HTTPS
  • 其他页面:仅限 HTTP

我尝试了多种方法,但无法像上面所说的那样使其工作。 我读了Spring安全常见问题解答 http://static.springsource.org/spring-security/site/faq.html#faq-tomcat-https-session我发现没有“自然”的方式来做我想做的事,但我被要求这样做,因此我需要一个我自己找不到的解决方法。

我正在使用 Spring Security 3.1.0。 我的网络容器是 Tomcat 6.0.33。

这是我的 Spring Security 配置:

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns:sec="http://www.springframework.org/schema/security"
    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-3.1.xsd
        http://www.springframework.org/schema/security http://www.springframework.org/schema/security/spring-security-3.1.xsd">

    <sec:http auto-config="true" use-expressions="true">

        <sec:intercept-url pattern="/log*.htm" access="anonymous"
            requires-channel="https" />
        <sec:intercept-url pattern="/admin/**" access="hasRole('admin')"
            requires-channel="http" />
        <sec:intercept-url pattern="/**"
            requires-channel="http" access="hasRole('authenticated')" />

        <sec:form-login login-page="/login.htm"
            default-target-url="/index.htm" authentication-failure-url="/login.htm?error=true"
            always-use-default-target="true" />
        <sec:logout logout-url="/logout.htm" delete-cookies="JSESSIONID" invalidate-session="true" />
        <sec:anonymous/>
        <sec:remember-me use-secure-cookie="true" />
    </sec:http>

    <sec:authentication-manager>
        <sec:authentication-provider>
            <sec:user-service>
                <sec:user name="johnny" password="johnny" authorities="authenticated, admin" />
                <sec:user name="charlie" password="charlie"
                    authorities="authenticated" />
            </sec:user-service>
        </sec:authentication-provider>
    </sec:authentication-manager>

</beans>

任何帮助将不胜感激。 提前致谢!


我发现这个问题的解决方法是禁用 Spring Security 的默认会话固定保护。我必须将“会话管理”元素添加到我首先描述的 XML 配置中。

<sec:http auto-config="true">

    <!-- ... -->

    <sec:session-management session-fixation-protection="none"/>

    <!-- ... -->
</sec:http>

除此之外,我们必须提供的“应用程序 URL”URL 不是登录 URL,而是主页 URL,例如不是http://myapp/login.htm http://myapp/login.htm BUT http://myapp/index.htm http://myapp/index.htm。这样做,如果用户已登录或拥有“记住我”cookie,他们将能够毫无问题地输入,并且浏览器将继续使用 HTTP 协议。如果没有,用户将被重定向到使用 HTTPS 的登录页面,成功登录后浏览器会正确切换回 HTTP。请考虑到这一点,因为如果您直接写入(或单击)登录 URL,HTTPS 将始终保持。

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

Spring Security 3.1.0 - 无法从 HTTPS 切换到 HTTP 的相关文章

随机推荐

  • 卡夫卡幂等生产者

    卡夫卡文档说 幂等生产者可以使用相同的生产者会话 但我无法理解这一点 比如说 Kafka 为每条消息添加序列号 最后一个序列号保存在 Kafka 中 不确定它在哪里维护 它如何生成序列号以及它保存在哪里 为什么当生产者崩溃并再次出现时它无法
  • 有没有办法在没有 persistence.xml 的情况下为 Spring 的 LocalContainerEntityManagerFactoryBean 提供 persistenceUnitName ?

    我有多个数据源和多个 EntityManagerFactories 要在我的 spring 上下文中定义 如果只有EntityManagerFactory 我们不需要给出persistenceUnitName 但是要将 EntityMana
  • WhenCreated 上的 Get-ADUser 筛选器适用于 -lt 但不适用于 -gt

    我试图搜索在指定日期之后创建的用户 但它总是不返回任何结果 如果我改变 gt ge 到 lt le它正确地提取结果 所以这应该是可行的 我知道我可以过滤所有内容 然后执行Where Object 来过滤gt ge 但我确实需要过滤器发生在服
  • C 递归函数不会返回 true

    我有一个搜索函数 它使用递归来执行数组的二分搜索 values for a value int recurseSearch int value int values int min int max if value gt values ma
  • 如何在 php 中“$_POST”返回同一页面或不同的结果页面? [关闭]

    Closed 这个问题需要细节或清晰度 help closed questions 目前不接受答案 我写了一个php文件计算器 php将结果发布到info php 我写了另一个 php 文件 计算器2 php将结果发布到同一页面 我怎样才能
  • java中对象和引用的区别与代码?

    public class TestVO public static void main String args VO vo1 new VO VO vo2 new VO VO vo3 VO vo4 new VO vo1 setName Sou
  • php获取多维数组的唯一值[重复]

    这个问题在这里已经有答案了 可能的重复 php多维数组删除重复项 https stackoverflow com questions 1861682 php multi dimensional array remove duplicate
  • Tomcat8 Gzip 压缩 CSS、JS

    我正在使用 tomcat8 并尝试模拟 CSS 和 JS 的 GZIP 压缩 我已在 server xml 中添加了条目 如下所示
  • angularjs指令动态设置模板url

    我正在使用模板 URL 创建指令 我想根据 user role 动态设置模板 URL 任何想法 这是我的指令代码 RatingRX directive headermenu gt directive directive restrict E
  • d3.js:如何创建“力导向图集群”

    我一直在探索 d3 js 库 尤其是力导向图创建 我仔细阅读了 Bostock 等人关于它的论文 并注意到我正在尝试创建的精确类型的图表 基本上是一个力导向图 其中带有围绕羽毛组的颜色编码区域 这是第三列第二行的插图 此处标记为 力导向图簇
  • 从其他容器访问mysql容器

    我已经使用暴露 3306 的 mysql 设置了 docker 容器 我已经指定了数据库用户 数据库密码并创建了一个测试数据库并将权限授予新用户 在另一个容器中 我想访问这个数据库 因此 我使用一个简单的 php 脚本设置了新容器 该脚本在
  • 首先将外键映射到 EF 代码中的非主代理键列

    public class A DatabaseGenerated DatabaseGeneratedOption Identity public virtual int Aid get set public virtual ICollect
  • 选择元素时,CSS 中的插入符号 ^ 有何用途?

    我在文件中遇到了这样的 css 选择器 contactDetails ul li a a href tel 像这样的抑扬符 在 CSS 中没有定义的含义 两字符运算符 可用于属性选择器 http www w3 org TR selector
  • 使用字节将字母数字代码解码为键值对象

    我有一个来自 CS GO 游戏的 十字准线代码 CSGO O4Jsi V36wY rTMGK 9w7qF jQ8WB 我可以使用此函数解码一些值 import BigNumber from bignumber js Intentionall
  • Mongodb php查询,在数组中搜索?

    我正在寻找一种在具有以下结构的 answer 文档数组中搜索关键字 例如 Henrik 的方法 Array id gt MongoId Object id gt 4eeedd9545c717620a000007 formId gt 6 re
  • 使用纬度/经度计算从 A 点到线段的距离

    我正在开发一个使用 GPS 的 Android 应用程序 我想知道如果 新位置 C 点 距离线段 AB 太远 是否有办法可以丢弃 GPS 位置数据 我正在使用发现的点到线段公式在维基百科上 http en wikipedia org wik
  • 在MySQL php中将ID从一个表插入到另一个表

    我有两张桌子 一张是Information另一个是work force 信息 劳动力 当 的时候addInformation 接到电话 我想将数据插入到信息 以及id这是自动增量将插入表workForce 列 twf 这是我尝试过的 添加信
  • 在 BPMN 中用一个任务表示 while 循环的正确方法是什么?

    BPMN 中表示仅重定向到一个任务的简单 while 循环的正确方法是什么 我想说使用循环活动是更好的选择 因为它有助于保持流程模型整洁 在流程中创建循环时也要小心 因为任务定义通常在第一次迭代和第二次迭代之间发生变化 例如第一次迭代是创建
  • 如何使应用程序的触摸栏在 macOS 上始终可见?

    我正在做macOS 菜单栏应用程序 https vidr io显示全屏覆盖 用户可以通过菜单栏中的滑块控制该叠加层的不透明度 我希望将这些控件移至触摸栏 因为该应用程序用于屏幕录制 并且会记录主屏幕上的干扰 我的应用程序中的滑块应该像默认情
  • Spring Security 3.1.0 - 无法从 HTTPS 切换到 HTTP

    我是 Spring Security 的新手 所以我制作了一个小型 Web 应用程序 以便尝试它并找到对我正在从事的项目有用的配置 我强制通过 HTTPS 访问登录页面 登录后需要切换回 HTTP 换句话说 登录页面 仅限 HTTPS 其他