我有一个spring spring MVC 3.0应用程序,实现了spring security。我正在创建一个小弹出窗口来更改当前登录用户的密码。一切都很好,直到我将表单发布到以下操作。更改密码 - Spring Security
@RequestMapping(value = "principalchangepassword" , method = RequestMethod.POST)
public @ResponseBody String principalchangepassword(Model uiModel, HttpServletRequest httpServletRequest){
Principal principal = (Principal) SecurityContextHolder.getContext().getAuthentication().getPrincipal();
StandardStringDigester digester = new StandardStringDigester();
digester.setAlgorithm("SHA-256"); // optionally set the algorithm
digester.setStringOutputType("hexadecimal");
digester.setSaltSizeBytes(0);
digester.setIterations(1);
String digest = digester.digest(httpServletRequest.getParameter("password1"));
principal.setPassword(digest.toLowerCase());
principal.merge();
return "Password Updated successfully";
}
当我做一个Ajax调用来更新当前主体的密码,我得到下面的异常信息。
org.hibernate.TransientObjectException: object references an unsaved transient instance – save the transient instance before flushing
我在做什么错?
你能描述一下方法吗principal.merge? – Jhonathan 2012-07-17 15:03:36
合并用于已存在的实体,即已存储在数据库中。如果它是一个全新的校长,我会说principal.persist(); – Binaryrespawn 2012-07-17 15:25:30