我正在开发一个Web应用程序,在web.xml
我对身份验证过程有一些疑问。因此,如果某人看到该查询,他可以轻松访问这些安全表。 是否可以访问我的 web.xml
或者我不应该担心?
更具体地说,我在web.xml
中引用了我的安全配置,在该安全上下文文件中,我查询了身份验证。这是我正在谈论的部分(我正在使用Spring Security)
<sec:authentication-manager alias="authenticationManager">
<sec:authentication-provider>
<sec:jdbc-user-service data-source-ref="dataSource"
group-authorities-by-username-query="
SELECT acg.ID, acg.GROUP_NAME, a.ROLE_NAME AS AUTHORITY
FROM USER_GROUP acg, USER_GROUP_MAPPING agm, PRINCIPAL_ROLE_MAPPING ga, ROLE a, INVESTOR_USER us
WHERE us.USERNAME = ? and agm.USER_ID = us.ID and acg.ID = ga.PRINCIPAL_ID and acg.ID = agm.USER_GROUP_ID and ga.ROLE_ID = a.ID
"
users-by-username-query="SELECT USERNAME,PASSWORD,IS_ACTIVE FROM INVESTOR_USER where USERNAME = ?"
authorities-by-username-query="
SELECT ua.PRINCIPAL_ID AS USERNAME, a.ROLE_NAME AS AUTHORITY
FROM PRINCIPAL_ROLE_MAPPING ua, ROLE a, INVESTOR_USER us
WHERE us.USERNAME = ? and ua.PRINCIPAL_ID = us.ID and ua.ROLE_ID = a.ID
" />
<sec:password-encoder ref="passwordEncoder"/>
<!-- <<<<<<<<<<<<<<<< Encoding Password >>>>>>>>>>>>>>>> -->
</sec:authentication-provider>
</sec:authentication-manager>
这不好吗?我不应该使用它吗?
请通过一些参考资料来证明您的答案。
当然,请用其他替代方法启发我。
答案 0 :(得分:3)
是否可以从客户端访问web.xml?
不。为什么?因为根据Servlet Specification,所有可访问的资源都通过servlet公开。如果您没有显式定义servlet(或过滤器或侦听器)来处理/公开.xml资源,则无需担心。
通常,Web容器负责保护配置资源。你可以相当肯定它是如此成功的。
您作为示例提供的代码不是您的web.xml,而是您的安全命名空间配置。这作为web.xml也是你不应该担心的事情。
一般来说,除非您明确指出,否则servlet容器不会公开访问任何内容。
不好吗?我不应该使用它吗?
一般来说没有不坏。您还可以得出结论,如果Spring安全性在其配置中支持SQL,那么他们也将其视为正常做法。
作为个人偏好,我倾向于使用自定义UserDetailsService
和AuthenticationManager
实现来处理用户身份验证,因为这会将数据库相关代码保留在安全定义之外。然而,这只是一种偏好。