java.lang.ClassCastException:org.springframework.security.core.userdetails.User无法转换为model.User

2024-04-03

我在我的应用程序中使用 Spring Security。我需要在我的应用程序的控制器中登录用户详细信息。

为此,我正在使用这段代码

User loggedInUser = (User)SecurityContextHolder.getContext().getAuthentication().getPrincipal();

但是在运行这段代码时我得到了一个 classcastException

java.lang.ClassCastException: org.springframework.security.core.userdetails.User cannot be cast to model.User

为了解决这个问题,我参考了这个article http://www.theserverside.com/tip/-Spring-Security-Customizing-Your-User-and-Authorization-in

最初我使用了 CustomUserServiceDetails 类

@Service("myUserDetailService")
@Transactional
public class CustomUserDetailsService implements UserDetailsService {

    private static final Logger logger = Logger.getLogger(CustomUserDetailsService.class);

    @Autowired
    private UserDAO userDAO;

    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.debug("User fetched from database in loadUserByUsername method " + domainUser);

        Set<Role> roles = domainUser.getRole();
        logger.debug("role of the user" + roles);

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

        boolean credentialNonExpired = true;

        return new org.springframework.security.core.userdetails.User(domainUser.getProfileName(), domainUser.getPassword(), domainUser.isAccountEnabled(),
                domainUser.isAccountNonExpired(), credentialNonExpired, domainUser.isAccountNonLocked(),authorities);

    }

}

但在参考这篇文章后,我从这里删除了 GrantedAuthorities 的设置并将其移至我的 User 类中。在我的 User 类中实现了 spring-security UserDetails 类

现在我的 User 类中有一个额外的属性

@Entity
@Table(name = "user")
public class User implements UserDetails {
    private Collection<GrantedAuthority> authorities;

使用 set 方法

public void setAuthorities(Set<Role> roles) {
        Set<GrantedAuthority> authorities = new HashSet<GrantedAuthority>();
        for(Role role: roles){
            authorities.add(new SimpleGrantedAuthority(role.getRole()));}
    }

答:我不确定如何将此属性映射到数据库。现有的 User 表架构不包含 GrantedAuthority 列,而且它甚至不是原始类型。我正在使用 Hibernate 进行对象映射。谁能建议我在控制器中获取用户类别信息的正确方法?

B.我还考虑了扩展spring的User类并重载我的User类的构造函数的方法。但是每次我在代码中的任何地方初始化用户时,我都必须提供所有构造函数参数,这根本不好。


而不是使用

User loggedInUser = (User)SecurityContextHolder.getContext().getAuthentication().getPrincipal();

try this

Authentication loggedInUser = SecurityContextHolder.getContext().getAuthentication();
String username = loggedInUser.getName();

参考:https://www.mkyong.com/spring-security/get-current-logged-in-username-in-spring-security/ https://www.mkyong.com/spring-security/get-current-logged-in-username-in-spring-security/

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

java.lang.ClassCastException:org.springframework.security.core.userdetails.User无法转换为model.User 的相关文章

  • Jackson - 反序列化嵌套 JSON

    我有一个 JSON 字符串 其格式如下 response execution status ready report cache hit true created on 2013 07 29 08 42 42 fact cache erro
  • 哪个 Swing 布局管理器可以获得我想要的布局?

    我正在尝试按照这个模型制作一个基本的登录菜单 我决定将整个菜单放入 JPanel 中 以便在连接成功后我可以切换到另一个面板 所以我决定使用 Borderlayout 将标题放在北区 将连接按钮放在南区 我将边框布局的中心本身设置为面板 我
  • 尝试使用 JRI 将 R 与我的 Java 应用程序集成,但出现错误。谁能解释一下原因和解决办法吗?

    我需要将 Java 与 R 集成来运行一些数学命令并使用 R 的功能进行绘图 以下部分代码给出了错误 public static void main String args HelloRWorld r new HelloRWorld r h
  • java.lang.LinkageError:尝试重复的类定义

    为什么会发生错误以及如何修复它 02 13 02 pool 4 thread 2 WARN Exception in thread pool 4 thread 2 02 13 02 pool 4 thread 2 WARN java lan
  • 有多少种方法可以将位图转换为字符串,反之亦然?

    在我的应用程序中 我想以字符串的形式将位图图像发送到服务器 我想知道有多少种方法可以将位图转换为字符串 现在我使用 Base64 格式进行编码和解码 它需要更多的内存 是否有其他可能性以不同的方式做同样的事情 从而消耗更少的内存 现在我正在
  • 从 @JsonProperty 值获取枚举常量

    我有一个标有 JsonProperty 的枚举 用于使用 Jackson 进行 JSON 序列化 反序列化 并且希望获取给定字符串 JsonProperty 的枚举值 public enum TimeBucket JsonProperty
  • Intellij 中的 Google OR-Tools:UnsatisfiedLinkError

    我正在建立一个应该使用 Google OR Tools 的 java 框架 下面的代码编译成功 但在运行时抛出异常 Exception in thread main java lang UnsatisfiedLinkError com go
  • 异步迭代器

    我有以下代码 while slowIterator hasNext performLengthTask slowIterator next 由于迭代器和任务都很慢 因此将它们放入单独的线程中是有意义的 这是对迭代器包装器的快速而肮脏的尝试
  • 我想在java中使用XQuery进行Xml处理

    我想用XQuery用于从 java 中的 Xml 获取数据 但我没有得到需要为此添加哪个 Jar 我在谷歌上搜索了很多 但没有得到任何有用的例子 例如我得到以下链接 https docs oracle com database 121 AD
  • 带有 OpenId 提供程序的 Java Spring 安全性

    我有一个 spring MVC 应用程序 另一个客户端应用程序想要使用 open id connect 访问我的 spring 应用程序 如何在服务器端实现开放ID提供商 请帮忙 MITREid 连接 OpenID Connect Java
  • 创建正则表达式匹配数组

    在Java中 我试图将所有正则表达式匹配返回到一个数组 但似乎您只能检查模式是否匹配某些内容 布尔值 如何使用正则表达式匹配来形成与给定字符串中的正则表达式匹配的所有字符串的数组 4城堡的回答 https stackoverflow com
  • JSch中如何设置文件类型和文件传输模式?

    我使用 Apache Common NetFTPClient并设置了我的ftpClient在上传文件之前使用如下所示的方法 ftpClient setFileType FTP BINARY FILE TYPE ftpClient setFi
  • Hibernate HQL:将对值作为 IN 子句中的参数传递

    我面临一个问题 如何使用 IN 子句将查询中的成对值的参数传递给 HQL 例如 select id name from ABC where id reg date in x y 并且参数是不同的数据类型string id 和reg date
  • 了解 Spark 中的 DAG

    问题是我有以下 DAG 我认为当需要洗牌时 火花将工作划分为不同的阶段 考虑阶段 0 和阶段 1 有些操作不需要洗牌 那么为什么 Spark 将它们分成不同的阶段呢 我认为跨分区的实际数据移动应该发生在第 2 阶段 因为这里我们需要cogr
  • 警告:无法更改每个人的权限:

    当运行 Java 快速入门示例时https developers google com drive web quickstart java hl hu https developers google com drive web quicks
  • 公共方法与公共 API

    在干净的代码书中 有一个观点是 公共 API 中的 Javadocs 同样 Effective java 一书也有这样的内容 项目 56 为所有公开的 API 元素编写文档注释 所以这就是我的问题 所有公共方法都被视为公共 API 吗 它们
  • 对于当前月份和日期但年份不同的日期,经过的月份计算未给出正确的结果

    我正在尝试计算自特定日期以来经过的月份 该函数工作正常 尽管如果我将今天的日期与过去的不同年份放在一起 它会给我一个月的差异 不到一个月 假设对于所有日期 该函数都运行良好 除了 如果今天是 2014 03 06 YYYY MM DD 并且
  • 如何用表达式语言获取布尔属性?

    如果我有一堂这样的课 class Person private int age public int getAge return age public boolean isAdult return age gt 19 我可以得到age像这样
  • NoSuchBeanDefinitionException:没有合格的 bean 类型

    当调用我的 GET 请求 模式计算 时 我收到此错误 我不明白为什么 我的依赖项注入是正确的 org springframework beans factory NoSuchBeanDefinitionException No qualif
  • 为什么范围为“provided”的依赖项会隐藏 Maven 中的传递依赖项?

    我的 Maven 项目中有三个模块 这稍微简化了 model包含JPA注释的实体类 坚持实例化一个实体管理器并调用它的方法 应用创建类的实例model 设置一些值并将它们传递给坚持 model and 坚持显然取决于javax persis

随机推荐

  • Google G Suite SAML SSO 域登录页面

    我正在使用 Google G Suite 并创建了一个使用 G Suite SAML 管理用户登录的应用程序 看 一切都很顺利 但是当用户没有登录我们的 G Suite 帐户并且也登录了他们自己的 Google 帐户时 我遇到了问题 在这种
  • 在弹性中映射 geo_point 字段数组

    我想将一些 JSON 持久保存到 elastic search 中 看起来有点像这样 name value points lat 0 0 lon 0 0 lat 1 0 lon 1 0 点是弹性中 geo point 类型的列表 因为它们是
  • 按对角线旋转数据框

    给定一个数据框 col1 col2 col3 0 1 4 7 1 2 5 8 2 3 6 9 如何得到这样的东西 0 1 2 0 1 0 2 0 3 0 1 5 0 4 0 7 0 2 9 0 6 0 NaN 3 NaN 8 0 NaN 如
  • 我如何跟踪退回的电子邮件?

    我想跟踪从我的服务器发送的退回电子邮件 我看了一些资料 发现退回的邮件都存储在邮箱中 直接读取邮箱文件就可以检测到 使用 php 检查退回邮件 https stackoverflow com questions 4243100 check
  • 如何将文件拖放到 .MAPIMail 上

    给定一些文件 或 shell 文件对象 我如何调用 MAPIMail向他们注册 shell 扩展处理程序 问题 我的计算机上有一些文件 C Users ian AppData Local Temp Contoso Invoice 14117
  • 如何更改具有深色背景的 ActionBarSherlock 内部搜索视图的自动完成文本颜色?

    我有自己的 ActionBarSherlock 主题 基于Theme Sherlock Light DarkActionBar 这是我的风格
  • Ant Zip 提取的父目录

    我有几个 zip 文件需要在 Ant 目标中解压缩 所有 zip 文件都位于同一目录中 并且具有相同的内部目录和文件结构 因此 我使用以下代码片段来解压缩目录中的所有 zip 文件 但每个 zip 文件在根目录下不包含父文件夹 因此每个连续
  • Mod_rewrite 已启用但不起作用

    我已经阅读了一段时间 但无法让它发挥作用 mod rewrite 在 Apache 中启用 我已将 AllowOverride 更改为 all 我的 htaccess 看起来像这样 Options FollowSymLinks Rewrit
  • 如何更改datagridview中列的颜色?

    我有一个 DataGridview 并且我将某些列设置为只读以用于数据输入目的 当我这样做时 该列保持正常的白色 尽管它不允许进入 如何将列设置为灰色 我看过很多关于如何为行着色的示例 但没有看到列的示例 如何使只读列显示为灰色 尝试设置默
  • 展平数据框

    我有这个嵌套数据框 test lt structure list id c 13 27 seq structure list 1 c 1997 1997 1997 2007 2 c 2007 2007 2007 2007 2007 2007
  • 如何通过innerText获取元素

    如果我知道文本标签包含哪些内容 如何获取 html 页面中的标签 例如 a SearchingText a 您可以使用 xpath 来完成此任务 var xpath a text SearchingText var matchingElem
  • pytesseract找不到指定的文件

    我的代码很简单 如下所示 import pytesseract from PIL import Image img Image open C temp foo jpg img load i pytesseract image to stri
  • castle IOC - 解决循环引用

    关于我的 MVP 实现的简单问题 目前我有下面的代码 其中演示者和视图都是通过容器解析的 然后演示者调用 View Init 将自己传递给视图 然而 我想知道是否有一种方法可以让容器修复我的循环引用 视图 gt 演示者 演示者 gt 视图
  • Codeigniter 会话不会取消设置

    我在一个社区工作 我想让用户注销 但它不会取消设置用户数据 S 你知道为什么吗 这是我的控制器功能 function logOff this gt session gt flashdata reports Du er logget af r
  • 如何使用 MAMP 在 mac 上安装 phpunit 3.5

    我正在尝试使用 MAMP 在 Mac OS X 上安装 PHPUnit 3 5 我确实通过 MAMP 的 PEAR 安装了 PHPUnit 3 5 这一切都是正确的 phpunit 位于 Applications MAMP bin php5
  • 如何将键值对加载到hive表中?

    以下是我的数据集 Jun name balaji id 101 Mar name kumar id 102 创建的表 create table sample month string name string id int row forma
  • ZeroMQ套接字在什么情况下会丢弃或无法传递消息?

    是否有某种规范或其他解释来描述正常情况 对于每种通信类型 您可以预期在 ZeroMQ 套接字上发送的消息不会被 所有 侦听进程接收 例如 我有一个实验程序 它基本上假设所有订阅者PUB套接字接收在该套接字上发送的所有消息 在初始化握手之后
  • Azure AD B2C 审核日志 - 图形 API - 查询选项不起作用

    我正在尝试检索我们租户的 Azure AD 用户登录审核日志 为此 我使用 Microsoft 的图形 API 1 https graph microsoft com v1 0 auditLogs signIns filter create
  • 使用seaborn白色风格没有显示主要刻度线并且无法恢复

    当我使用seaborn 白色 样式生成绘图时 我看到了主要的勾号labels但我没有看到任何重大的问题marks 使用 将主要刻度线设置得更大 matplotlib inline import seaborn as sns import m
  • java.lang.ClassCastException:org.springframework.security.core.userdetails.User无法转换为model.User

    我在我的应用程序中使用 Spring Security 我需要在我的应用程序的控制器中登录用户详细信息 为此 我正在使用这段代码 User loggedInUser User SecurityContextHolder getContext