使用弹簧安全和弹簧数据将用户保存到对象上

时间:2015-12-01 04:04:16

标签: spring-mvc spring-security

所以我试图将用户保存到"课程"我创建的对象,但每次我尝试保存它时都会收到错误org.springframework.security.core.userdetails.User cannot be cast to com.example.domain.User我不确定我的问题在哪里但是我试图获取主体并将其保存到当它被提交并且我在控制器内执行此操作时。当我在调试模式下运行它时,我可以看到主体正在填充正确的用户

如果有人能够看到我出错的地方,并且能指出正确的方向,那将是非常棒的。提前谢谢。

这是我的控制器

@RequestMapping(value="createCourse", method=RequestMethod.GET)
public String createCourseGet (ModelMap model)
{       
    Course course = new Course();
    model.put("course",  course);

    return "createCourse";
}

@RequestMapping(value="createCourse", method=RequestMethod.POST)
public String createCoursePost (@ModelAttribute Course course, Long userId, ModelMap model)
{   
    Authentication auth = SecurityContextHolder.getContext().getAuthentication();
    User currentUser = (User)auth.getPrincipal();

    currentUser = userRepo.findOne(userId);
    course.setUser(currentUser);
    currentUser.getCourses().add(course);

    courseRepo.save(course);

    return "redirect:/courses";
}

如果您有任何其他代码需要查看以查看问题,请告诉我。感谢。

更新

好的,所以我现在知道校长和用户不一样,现在我正在检索校长名称并将其设置为课程,但课程需要用户ID。是否有可能从我现在的用户那里获取用户的身份?

    @RequestMapping(value="createCourse", method=RequestMethod.POST)
public String createCoursePost (@ModelAttribute Course course, ModelMap model)
{   
    String name = SecurityContextHolder.getContext().getAuthentication().getName();
    User user = this.userRepo.findByUsername(name);

    course.setUser(user);

    courseRepo.save(course);

    return "redirect:/courses";
}

0 个答案:

没有答案