java - 您如何配置 spring security 以使用基本身份验证对数据库进行身份验证?

标签 java spring-security basic-authentication

我已经用 Java 编写代码 13 周了,目前正在开发 RESTful Web 服务。后端已经完成,现在我正在创建一个 UI。要求之一是用户使用 http basic 登录。我将此配置为当用户导航到该页面时弹出对话框出现,您可以输入一个硬编码用户我已经登录并登录。但我真正需要它做的是验证用户一个数据库。我进行了广泛搜索,试图找到一种方法来配置它以针对数据库进行验证,但无济于事。这是我的虚拟用户的 spring-security.xml 文件。

<beans:beans xmlns="http://www.springframework.org/schema/security"
    xmlns:beans="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.0.xsd
    http://www.springframework.org/schema/security
    http://www.springframework.org/schema/security/spring-security-3.1.xsd">

    <!-- <http auto-config="true"> <intercept-url pattern="/welcome*" access="ROLE_USER" 
        /> <form-login login-page="/login" default-target-url="/welcome" authentication-failure-url="/loginfailed" 
        /> <logout logout-success-url="/logout" /> </http> -->

    <http>
        <intercept-url pattern="/*" access="ROLE_USER" />
        <http-basic />
    </http>

    <authentication-manager>
        <authentication-provider>
            <user-service>
                <user name="tmain" password="123456" authorities="ROLE_USER" />
            </user-service>
        </authentication-provider>
    </authentication-manager>

</beans:beans>

这里是(我相信)唯一与我的 web.xml 文件中的设置相关的信息。

<filter>
        <filter-name>springSecurityFilterChain</filter-name>
        <filter-class>org.springframework.web.filter.DelegatingFilterProxy</filter-class>
    </filter>

    <filter-mapping>
        <filter-name>springSecurityFilterChain</filter-name>
        <url-pattern>/*</url-pattern>
    </filter-mapping>

任何人都可以给我一些关于配置 spring security 以针对数据库而不是我拥有的虚拟用户进行身份验证的指导吗?我在数据库中有一个用户实体,其中包含名字、姓氏、电子邮件、密码、activeStatus 和时区。电子邮件是用户的用户名。我们将不胜感激。

最佳答案

您的身份验证提供程序应如下所示:

<authentication-manager>
    <authentication-provider>
        <jdbc-user-service data-source-ref="dataSource" />
    </authentication-provider>
</authentication-manager>

默认实现需要这些表:

create table users(
    username varchar_ignorecase(50) not null primary key,
    password varchar_ignorecase(50) not null,
    enabled boolean not null);

create table authorities (
    username varchar_ignorecase(50) not null,
    authority varchar_ignorecase(50) not null,
    constraint fk_authorities_users foreign key(username) references users(username));
    create unique index ix_auth_username on authorities (username,authority);

你可以有不同的数据库结构并使用这样的东西:

<jdbc-user-service data-source-ref="dataSource" authorities-by-username-query="select username,authority from users where username=?"/>

不要忘记创建dataSource bean...

是的.. 所有这些都可以在 documentation 中找到.

关于java - 您如何配置 spring security 以使用基本身份验证对数据库进行身份验证?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10836839/

相关文章:

java - 如何验证 GCM 推送通知的服务器端实现的注册?

java - 具有多个输入字段的 HTML 表单

java - Spring Security https认证

java - 使用 Spring Security 时 Bootstrap 不工作

tomcat - 为基本身份验证创建没有用户名和加密密码的 Tomcat 用户

Symfony2 + FOSUserBundle : http_basic authentication works, http_digest 失败

java - 是否有一种 Java 数据结构实际上是具有双索引和内置插值的 ArrayList?

java - 多个对象到剪贴板

c# - ASP.NET MVC5 基本 HTTP 身份验证和 AntiForgeryToken 异常

Spring security,如何基于动态角色限制用户访问某些资源?