在 Spring Security 中使用配置文件名称或电子邮件登录

2023-12-30

我有一个用户 bean,其中包含 userName、profileName、email 等字段。

我正在我的应用程序中实现 Spring Security。在登录表单中,我希望用户输入个人资料名称或电子邮件,他应该能够使用这两者登录。但似乎该配置仅适用于 userName。我正在使用 hibernate 从数据库中获取用户详细信息。 下面是我的代码

表单登录.jsp

<form name='f' action="<c:url value='j_spring_security_check' />"
        method='POST'>

        <table>
            <tr>
                <td>Email/ProfileName</td>
                <td><input type='text' name='j_username' value=''>
                </td>
            </tr>
            <tr>
                <td>Password:</td>
                <td><input type='password' name='j_password' />
                </td>
            </tr>
            <tr>
                <td colspan='2'><input name="submit" type="submit"
                    value="submit" />
                </td>
            </tr>
            <tr>
                <td colspan='2'><input name="reset" type="reset" />
                </td>
            </tr>
        </table>

    </form> 

自定义 UserDetailsS​​ervice 类中的 loadByUserName 方法

public UserDetails loadUserByUsername(String name)throws UsernameNotFoundException, DataAccessException 
    {

        //returns the get(0) of the user list obtained from the db
        User domainUser = userDAO.getUser(name);
        logger.info("User fetched from database in loadUserByUsername method " + domainUser);

        Set<Roles> roles = domainUser.getRole();
        logger.info("roles of the user"+ roles);


        Set<GrantedAuthority> authorities = new HashSet<>();
        for(Roles role:roles) {
            authorities.add(new SimpleGrantedAuthority(role.getRole()));
            logger.info("role" +role+" role.getRole()"+(role.getRole()));
        }

        return new org.springframework.security.core.userdetails.User(
                domainUser.getName(),
                domainUser.getPassword(),
                domainUser.isEnabled(),
                domainUser.isAccountNonExpired(),
                domainUser.isCredentialsNonExpired(),
                domainUser.isAccountNonLocked(),
                authorities);
}

从数据库查询

@SuppressWarnings("unchecked")
    public User getUser(String name){

        List<User> userList = new ArrayList<User>(); 
        Query query = sessionFactory.getCurrentSession().createQuery("from User u where u.name = :name");
        query.setParameter("name", name);
        userList = query.list();  
        if (userList.size() > 0)  
            return userList.get(0);  
        else  
            return null; 
    }

有人能帮忙解决这个问题吗?

spring-security.xml

<http auto-config="true">
        <intercept-url pattern="/forms/welcome*" access="ROLE_ADMIN" />
        <!-- Below config will display the custom form for authentication -->
        <form-login login-page="/forms/login" default-target-url="/forms/welcome"
            authentication-failure-url="/forms/loginfailed" />
        <logout logout-success-url="/forms/logout" />
    <!--    <http-basic /> -->
    </http> 


    <authentication-manager>
        <authentication-provider user-service-ref="myUserDetailService">
          </authentication-provider>
    </authentication-manager>

您没有发布您的安全配置。我假设您已经设置了标准配置DaoAuthenticationProvider就位,您已经可以使用用户名登录。

在这种特殊情况下,我只看到一项修改,允许使用用户名或电子邮件登录。添加一个or谓词也通过电子邮件查询用户的休眠查询。我假设您的实体拥有财产email.

"from User u where u.name = :name or u.email = :name"
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在 Spring Security 中使用配置文件名称或电子邮件登录 的相关文章

  • 在Spring中使用什么样的“EventBus”?内置、Reactor、Akka?

    我们将在几周后启动一个新的 Spring 4 应用程序 我们希望使用一些事件驱动的架构 今年 我到处读到有关 Reactor 的内容 在网上查找时 我偶然发现了 Akka 所以现在我们有3个选择 春天的ApplicationEvent ht
  • Java AES 128 加密方式与 openssl 不同

    我们遇到了一种奇怪的情况 即我们在 Java 中使用的加密方法会向 openssl 生成不同的输出 尽管它们在配置上看起来相同 使用相同的键和 IV 文本 敏捷的棕色狐狸跳过了懒狗 加密为 Base64 字符串 openssl A8cMRI
  • 按第一列排序二维数组,然后按第二列排序

    int arrs 1 100 11 22 1 11 2 12 Arrays sort arrs a b gt a 0 b 0 上面的数组已排序为 1 100 1 11 2 12 11 22 我希望它们按以下方式排序a 0 b 0 首先 如果
  • 当从服务类中调用时,Spring @Transactional 不适用于带注释的方法

    在下面的代码中 当方法内部 是从内部调用的方法外部 应该在交易范围内 但事实并非如此 但当方法内部 直接从调用我的控制器class 它受到事务的约束 有什么解释吗 这是控制器类 Controller public class MyContr
  • 我需要什么库才能在 Java 中访问这个 com.sun.image.codec.jpeg?

    我正在用java创建一个图像水印程序 并导入了以下内容 import com sun image codec jpeg JPEGCodec import com sun image codec jpeg JPEGEncodeParam im
  • Java 文件上传速度非常慢

    我构建了一个小型服务 它从 Android 设备接收图像并将其保存到 Amazon S3 存储桶中 代码非常简单 但是速度非常慢 事情是这样的 public synchronized static Response postCommentP
  • 在 S3 中迭代对象时出现“ConnectionPoolTimeoutException”

    我已经使用 aws java API 一段时间了 没有遇到太多问题 目前我使用的是库 1 5 2 版本 当我使用以下代码迭代文件夹内的对象时 AmazonS3 s3 new AmazonS3Client new PropertiesCred
  • 在 nHibernate 关系中使用实体的 Lite 版本?

    在某些情况下 出于性能原因 创建一个实体的轻量级版本 指向同一个表 但映射的列较少 这是一个好主意吗 例如 如果我有一个包含 50 列的联系人表 并且在一些相关实体中 我可能对 FirstName 和 LastName 属性感兴趣 那么创建
  • 很好地处理数据库约束错误

    再一次 它应该很简单 我的任务是在我们的应用程序的域对象中放置一个具有唯一约束的特定字段 这本身并不是一个很大的挑战 我刚刚做了以下事情 public class Location more fields Column unique tru
  • 使用过滤器@ComponentScan所有包的危险

    我现在正在开发一个概念应用程序 我想使用组件扫描来使用特定的自定义 Spring 元注释来获取类路径上任何位置的所有类 我的注释如下所示 Target value ElementType TYPE Retention value Reten
  • IntelliJ - 调试模式 - 在程序内存中搜索文本

    我正在与无证的第三方库合作 我知道有一定的String存储在库深处的某个字段中的某处 我可以预测的动态值 但我想从库的 API 中获取它 有没有一种方法可以通过以下方式进行搜索 类似于全文搜索 full程序内存处于调试模式并在某个断点处停止
  • 欧洲中部时间 14 日 3 月 30 日星期五 00:00:00 至 日/月/年

    我尝试解析格式日期Fri Mar 30 00 00 00 CET 14至 日 月 年 这是我的代码 SimpleDateFormat formatter new SimpleDateFormat dd MM yyyy System out
  • Jersey 客户端请求中未设置 Content-Length-Header

    我正在使用 Jersey Client 访问网络服务 如下所示 response r accept MediaType TEXT PLAIN TYPE header content length 0 post String class 其中
  • java.lang.NumberFormatException: Invalid int: "3546504756",这个错误是什么意思?

    我正在创建一个 Android 应用程序 并且正在从文本文件中读取一些坐标 我在用着Integer parseInt xCoordinateStringFromFile 将 X 坐标转换为整数 Y 坐标的转换方法相同 当我运行该应用程序时
  • 测试弱引用

    在 Java 中测试弱引用的正确方法是什么 我最初的想法是执行以下操作 public class WeakReferenceTest public class Target private String value public Targe
  • HQL Hibernate 内连接

    我怎样才能在 Hibernate 中编写这个 SQL 查询 我想使用 Hibernate 来创建查询 而不是创建数据库 SELECT FROM Employee e INNER JOIN Team t ON e Id team t Id t
  • javafx android 中的文本字段和组合框问题

    我在简单的 javafx android 应用程序中遇到问题 问题是我使用 gradle javafxmobile plugin 在 netbeans ide 中构建了非常简单的应用程序 其中包含一些文本字段和组合框 我在 android
  • 具有特定参数的 Spring AOP 切入点

    我需要创建一个我觉得很难描述的方面 所以让我指出一下想法 com x y 包 或任何子包 中的任何方法 一个方法参数是接口 javax portlet PortletRequest 的实现 该方法中可能有更多参数 它们可以是任何顺序 我需要
  • FileOutputStream.close() 中的设备 ioctl 不合适

    我有一些代码可以使用以下命令将一些首选项保存到文件中FileOutputStream 这是我已经写了一千遍的标准代码 FileOutputStream out new FileOutputStream file try BufferedOu
  • GUI Java 程序 - 绘图程序

    我一直试图找出我的代码有什么问题 这个想法是创建一个小的 Paint 程序并具有红色 绿色 蓝色和透明按钮 我拥有我能想到的让它工作的一切 但无法弄清楚代码有什么问题 该程序打开 然后立即关闭 import java awt import

随机推荐

  • 如何从任意函数中创建函子?

    我有一堆函数想用作函子 即使用类型而不是传递指向函数的指针或任何其他类型的数据 是否有一种优雅 惯用 标准的方法来使用标准库或标准库 Boost 来做到这一点 也许使用bind 不知何故 或者我应该选择一些简单的东西 嗯 有点简单 例如 t
  • 将自定义帖子类型添加到 Woocommerce

    您能否告诉我是否有任何方法可以将您自己的自定义帖子类型添加到 Woocommerce 并使用它而不是使用 Woocommerce 产品 Thank 无论 WooCommerce 如何 您都可以注册自定义帖子类型 WooCommerce 创建
  • Jetty 8 作为使用 java servicewrapper.on windows 的服务

    我正在尝试使用 JavaServiceWrapper 3 5 16 将 jetty 设置为服务 并且我已经尝试了指定的所有四种集成方法JSW网站 http wrapper tanukisoftware com doc english int
  • 在 HTML 中使用自定义标签有什么影响,或者不使用自定义标签有什么优点?

    我只讨论具有开始标签和结束标签的自定义标签 例如
  • 如何在 NodeJs 中下载并解压内存中的 zip 文件?

    我想从互联网下载一个 zip 文件并将其解压缩到内存中而不保存到临时文件 我怎样才能做到这一点 这是我尝试过的 var url http bdn ak bloomberg com precanned Comdty Calendar Spre
  • perl中如何将字符串转换为json

    我对 Perl 很陌生 所以请帮助我完成以下操作 我有一个 perl 脚本来执行 telnet 命令 该脚本以字符串形式接收来自服务器的响应 实际上服务器创建一个 json 字符串 然后将其发送到客户端程序 但客户端程序将其显示为strin
  • 如何检测模块是否以“可编辑模式”安装?

    我像这样 pip 安装我的模块 cd my working dir pip install e 当我稍后从 Python 中导入模块时 我可以以某种方式检测该模块是否以这种可编辑模式安装吗 现在 我只是检查是否有 git 文件夹os pat
  • Laravel Lumen Memcached 未找到

    好的 我刚刚开始使用 Lumen 我正在尝试使用 Auth 但是调用 Auth check 或 Auth 的任何其他函数 会导致以下错误致命错误 在第 52 行的供应商 照明 缓存 MemcachedConnector php 中找不到类
  • WooCommerce Ajax 添加到购物车 facebook 像素事件不起作用

    使用 Ajax 将产品添加到购物车时 不会触发添加到购物车 Facebook 像素事件 这是我在 head 中的第一个输出
  • 如何获取系统货币符号到字符串

    如果我这样做 Console Write The sum is 0 c 12 我使用的是瑞典计算机 所以它会返回 总金额为 12 00 克朗 但是有没有一种简单的方法可以只获取货币符号而不包含数字呢 像这样 显然这不起作用 但只是为了展示我
  • 获取 LDAP 对象的内部属性

    我正在尝试获取 LDAP 用户内部属性 但找不到如何获取它们 DirContext ctx this getDirContext List
  • tm 包中的 findAssocs 出现问题

    我正在尝试使用 tm 包查找与术语文档矩阵中的特定单词相关的单词 我在用findAssocs去做这个 论点findAssocs are x 术语 文档矩阵 term 持有术语的字符 corlimit 相关下限的数字 我一直在得到numeri
  • Xcode 14:命令 PhaseScriptExecution 失败,退出代码非零

    将 Xcode 更新到版本 14 0 后 我收到此错误 命令 PhaseScriptExecution 失败 退出代码非零 如果有人知道如何解决 请告诉我 在您的项目中搜索以下行 它必须位于ios Pods Target Support F
  • Snakemake - 尝试使用 global_wildcards 时出现问题(类型错误:预期的 str,得到列表)

    我是 Snakemake 的新手 也不是 Python 专家 所以答案可能非常明显 我的工作流程中的所有内容在我的测试中都运行良好 直到我尝试使用glob 通配符为了将我的所有 fastq gz 文件从一个目录 FASTQDIR 转换为 f
  • IOS:使用标签值更改 UIImageView

    我有 20 个 UIImageView 我想更改它们的图像 但我不想创建20个IBOutlet 我想使用标签值来更改图像 我在界面生成器中设置了标签值 然后 如果我想更改图像视图编号 15 处的图像 我能怎么做 UIImageView im
  • Spring Batch如何在写入步骤之前处理数据列表

    我正在尝试从数据库读取客户端数据并将处理后的数据写入平面文件 但我需要处理整个结果ItemReader写入数据之前 例如 我正在从数据库行读取 Client public class Client private String id pri
  • C++ 新手。关于常量指针的问题

    我正在尝试通过一些网络教程学习 C 我没有可用的编译器 否则我会尝试一下 我不确定 const 指针是什么意思 这是否意味着它总是指向相同的内存地址 你为什么要这么做 下面的代码合法吗 int const aPointer new int
  • 关于Java“属性”和C#“属性”之间的区别

    作为实习的一部分 我使用 C 工作了整整六个月 我在实习中学到的东西是 C 属性 又称为 setter 和 getter 的美妙之处 刚开始实习的时候 属性也是我比较困惑的一个地方 但是用了一段时间 我就爱上了它 回到Java上课 我不得不
  • 如何对齐表单中的所有输入

    我试图弄清楚如何将所有输入的左侧对齐在一起 现在整个 element 行都向左对齐 因此所有输入字段都是交错的 我不希望输入交错 我希望标签文本向右对齐 并且输入全部对齐 我尝试了一堆随机 CSS 但我似乎无法弄清楚 有任何想法吗
  • 在 Spring Security 中使用配置文件名称或电子邮件登录

    我有一个用户 bean 其中包含 userName profileName email 等字段 我正在我的应用程序中实现 Spring Security 在登录表单中 我希望用户输入个人资料名称或电子邮件 他应该能够使用这两者登录 但似乎该