1

我正在开发一个 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>


不好吗?我不应该使用它吗?

请用一些参考来证明你的答案。
当然,请用其他替代方案启发我。

4

1 回答 1

3

可以从客户端访问 web.xml 吗?

,为什么?因为根据Servlet 规范,所有可访问的资源都通过 servlet 公开。如果您没有明确定义 servlet(或过滤器或侦听器)来处理/公开 .xml 资源,则无需担心。

一般来说,保护配置资源是 Web 容器的责任。你可以相当肯定它成功了。

您作为示例给出的代码不是您的 web.xml,而是您的安全命名空间配置。这作为 web.xml 也是你不应该担心的。

一般来说,一个 servlet 容器不会公开任何东西,除非你特别告诉它

不好吗?我不应该使用它吗?

一般来说,没有它还不错。您还可以得出结论,如果 Spring Security 在其配置中支持 SQL,那么他们也将其视为正常做法。

但是,作为个人偏好,我倾向于使用自定义UserDetailsServiceAuthenticationManager实现来处理用户身份验证,因为这会将与数据库相关的代码排除在安全定义之外。然而,这只是一种偏好。

于 2012-08-08T08:26:48.550 回答