【发布时间】:2012-10-11 11:35:36
【问题描述】:
我写在这里是因为我找不到我的问题的明确答案:
我的项目正在使用 Spring MVC 和 Spring Security。我为 Web 应用程序(当然使用 Java)很好地安装了两者。我可以使用 post 和 get 方法访问,但只有在用户通过 Spring Security 的通常形式连接之后。
从现在开始,用户对这样的地址发出请求:
../../get.request?request=getListCommand
其中 get.request 是来自 Spring MVC 的映射。只有在用户通过身份验证后才能启用此访问权限!
我需要做的: 添加直接访问此请求的可能性,无需之前已通过身份验证,使用类似的地址比如这个:
http://123.123.123.123:123/get.request?request=getListCommand&j_password=myPassword&j_username=myName
或
same thing with the post protocol and the params given (request=getListCommand, j_password=myPassword, j_username=myName)
当然,必须在执行请求并将结果发回之前完成身份验证。
我在很多网站上搜索过,或者直接在 Spring security 网站上搜索过。他们谈论过滤器链、自己的用户名认证、RMI;但我并没有真正找到一个完整的例子来做我上面介绍的。
感谢任何能以这种方式帮助我的人。
ps:我使用所有默认或最简单的 Spring 安全配置(没有风水风格:-))
这是我的安全上下文 xml 文件
<http realm="NexCap Up"
auto-config="true"
access-denied-page="/www/jsp/authentication/accessDenied.jsp"
create-session="always"
disable-url-rewriting="true">
<port-mappings>
<port-mapping http="8084" https="8443"/>
</port-mappings>
<intercept-url pattern="/www/jsp/authentication/connexion.jsp"
access='IS_AUTHENTICATED_ANONYMOUSLY' requires-channel="https"/>
<intercept-url pattern="/www/jsp/authentication/connexionFailed.jsp"
access='IS_AUTHENTICATED_ANONYMOUSLY' />
<intercept-url pattern="/www/jsp/authentication/applicationExit.jsp"
access='IS_AUTHENTICATED_ANONYMOUSLY' />
<intercept-url
pattern="/get.Request"
method="GET"
access="ROLE_REMOTE" />
<intercept-url
pattern="/post.Request"
method="POST"
access="ROLE_REMOTE" />
<intercept-url pattern="/**"
access="ROLE_REMOTE,ROLE_SCRIPT" />
<form-login
authentication-failure-url="/www/jsp/authentication/connexionFailed.jsp"
login-page="/www/jsp/authentication/connexion.jsp"
default-target-url="/www/jsp/index.jsp"
always-use-default-target="true"/>
<logout
logout-success-url="/www/jsp/authentication/applicationExit.jsp"
invalidate-session="true"/>
<session-management
invalid-session-url="/www/jsp/authentication/invalidSession.jsp"
session-authentication-error-url = "/www/jsp/authentication/authentificationError.jsp"
session-fixation-protection="none">
<!-- Sessions concurrentes -->
<concurrency-control
error-if-maximum-exceeded="false"
expired-url="/www/jsp/authentication/sessionExpired.jsp"
max-sessions="1" />
</session-management>
</http>
还有web.xml文件中关于spring security的部分
<security-constraint>
<web-resource-collection>
<web-resource-name>Security</web-resource-name>
<url-pattern>/*</url-pattern>
</web-resource-collection>
<user-data-constraint>
<transport-guarantee>CONFIDENTIAL</transport-guarantee>
</user-data-constraint>
</security-constraint>
<filter>
<display-name>springSecurityFilterChain</display-name>
<filter-name>springSecurityFilterChain</filter-name>
<filter-class>
org.springframework.web.filter.DelegatingFilterProxy
</filter-class>
<filter-mapping>
<filter-name>springSecurityFilterChain</filter-name>
<url-pattern>/*</url-pattern>
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>
/WEB-INF/spring/secu-config.xml
</param-value>
【问题讨论】:
-
将密码放在 URL 中是一个糟糕的主意,因为许多 Web 服务器会编写 URL 来访问日志。
-
不是公网,是内网。
-
尽管它在 Intranet 上并不安全,但有人可能站在已登录的人旁边并在 url 中看到他们的密码,但很多人在不同的系统上使用相同的密码,所以你真的让你的用户不安全。至少您应该将用户名和密码推送到 http 标头中。用户还会在即时通讯和电子邮件上剪切和粘贴网址,这可能会无意中导致问题。您是否希望某个使用您的应用程序的高级经理因为通过电子邮件发送链接并泄露了他的用户名/密码而生气
标签: java spring security getmethod