当前位置: 首页 > 知识库问答 >
问题:

在Spring security中是否可以仅使用HTTPS登录?

余歌者
2023-03-14

我的要求是只保护登录页面以保护用户凭据。成功登录后,用户可以在http模式下访问受限页面。这是一个要求,因为SSL过载。用户需要访问包含大量数据的受保护页面。

我想知道是否可以这样做,尽管它不如维护https上下文安全。

这是我的配置:

<security:http auto-config="true">
    <security:intercept-url pattern="/login*" access="IS_AUTHENTICATED_ANONYMOUSLY" requires-channel="https"/>
    <security:intercept-url pattern="/welcome*" access="ROLE_USER, ROLE_ADMIN" />
    <security:form-login login-page="/login" authentication-failure-handler-ref="customAuthenticationFailureHandler" default-target-url="/welcome" />  
    <security:access-denied-handler ref="openIdAuthFailureHandler"/>
</security:http>  

如果我尝试设置/登录为https,则所有内容都处于https模式。我怎样才能做到这一点?

编辑:

正如s.kwiotek建议的那样,我在其他url模式中添加了requires channel=“http”:

<security:http auto-config="true">
    <security:intercept-url pattern="/login*" access="IS_AUTHENTICATED_ANONYMOUSLY" requires-channel="https"/>
    <security:intercept-url pattern="/welcome*" access="ROLE_USER, ROLE_ADMIN" requires-channel="http"/>
    <security:intercept-url pattern="/user/*" access="ROLE_USER, ROLE_ADMIN" requires-channel="http" />
    <security:intercept-url pattern="/rest/*" access="ROLE_USER, ROLE_ADMIN" requires-channel="http" />
    <security:intercept-url pattern="/admin/*" access="ROLE_ADMIN" requires-channel="http" />
    <security:session-management session-fixation-protection="none"/>
    <security:port-mappings>
        <security:port-mapping http="8080" https="8443"/>       
    </security:port-mappings>
    <security:form-login login-page="/login" authentication-failure-handler-ref="customAuthenticationFailureHandler" always-use-default-target="true" default-target-url="/user/home" />  
    <security:logout logout-success-url="/" />
    <security:access-denied-handler ref="openIdAuthFailureHandler"/>
</security:http>  

我添加了session fixturement protection=“none”,因为如果我只包含requires channel=“http”,它就不会超出登录的范围。我尝试登录,但返回登录。

如果我添加会话固定保护,它将进入用户的家中,但在第二次登录尝试时。当您访问/myapp/login时,会创建两个jsessionid:

JSESSIONID=5B37413F33DF0AA45F31D711754C3704; path=/myapp; domain=localhost
JSESSIONID=658F9F8669AF6B296A77D448C1A64B71; path=/myapp/; domain=localhost; HttpOnly

然后我尝试登录,然后返回登录,但url不同:

https://myapp/login;jsessionid=C1EC352C42D6AC379DB1B65A9295E8A1

当jsessionid在URL中时,我尝试登录,并成功重定向到用户的主页(/user/home)。如果我移除会话固定保护,jessesionid会出现在URL中,但我没有成功重定向到用户的主页。

我不知道谁创建了前两个JSSessionID,以及如何解释这种行为。我唯一想做的就是通过ssl保护登录,然后通过http访问。

共有2个答案

陆俭
2023-03-14

例如:

<security:intercept-url pattern="/**" access="ROLE_USER" requires-channel="http"/>
勾海超
2023-03-14

(这应该是一条评论。但我的帐户声誉有限。)

您可能需要重新考虑允许在超文本传输协议模式下访问受限页面。

根据http://www.troyhunt.com/2011/11/owasp-top-10-for-net-developers-part-9.html,

许多人认为TLS纯粹是一种加密传输中敏感用户数据的手段。例如,您经常会看到登录表单通过HTTPS发布凭据,然后将经过身份验证的用户发送回HTTP,以完成剩余会话。他们的想法是,一旦成功保护了密码,TLS就不再发挥作用。上面的示例表明,需要保护整个经过身份验证的会话,而不仅仅是传输中的凭据。这是Firesheep去年的一个教训,可以说是Facebook实现跨认证会话使用TLS选项的催化剂。

 类似资料:
  • 我问这个问题是因为最近有一些用户的密码更改。我正在试图找出最新的密码,这意味着,我必须尝试两者。这方面的应用程序还没有部署,所以我需要一种方法在Jboss本身中验证这一点。我使用的JBOSS版本为7.2。

  • 阅读文档时,并不十分清楚。 我想要的是能够存储和检索简单的json文档。使用CloudSearch,似乎可以以SDF格式存储文档,然后搜索它们,但它只返回文档ID和指定字段的一小部分(我认为是200个字符)。 有没有一种方法来检索完整的文档ID只是使用CloudSearch?还是打算作为搜索和使用主存储服务的附加工具?

  • AccessibilityService在系统的内存管理方面与普通服务有何不同? 我想问的是:系统可以为了节省内存而关闭AccessibilityService吗?如果可以,当您进入AccessibilityService时,您会看到它打开还是关闭?用户是否必须再次手动打开? 使用startForeground是否有助于使AccessibilityService保持活动状态? 在一个类似的问题中,

  • 问题内容: 我正在使用Spring和struts,并且在“ /META-INF/context.xml”中具有以下条目 是否可以通过以下方式实现, 我的applicationContext.xml具有以下内容, 我想从属性文件中选取jdbc.username和jdbc.pwd的值。 问题答案: 使用Spring的PlaceholderPropertyConfigurer(仅替换Spring上下文中

  • 问题内容: 我想使用React在整个DOM中多次添加组件。这个小提琴显示了我要执行的操作,并且不会引发任何错误。这是代码: HTML: JS: 我已经看过这个问题了,恐怕通过上述操作,我将冒使React组件相互干扰的风险。该问题的答案建议使用服务器端渲染,这对我来说不是一个选择,因为我正在使用Django服务器端。 另一方面,也许我在做什么就可以了,因为我只安装了一个React库实例(而不是多个组