如何针对不同场景实现一种控制器映射方法

时间:2013-08-15 15:46:23

标签: spring redirect spring-mvc

我有一个可以在不同场景中调用的弹簧控制器方法。这是一个例子......

@RequestMapping("/resetpassword")
public ModelAndView resetpassword( @Valid @ModelAttribute("resetpasswordForm") ResetPawdFormForm resetPawdFormForm, ModelAndView modelAndView){

......这种方法可以在3种不同的情况下执行....

  1. 使用来自用户重置密码链接的超链接发送到用户邮箱.. 例如:localhost / myApp / login / resetpassword // 在这里,我可以在DB中验证userID和activationSecretCode,并让用户重置密码

  2. 用户可以从用户设置页面点击resetpassword链接。 例如:由于用户已经来自用户设置页面,我可以验证userSession并允许他重置密码

  3. 用户可以第一次成功登录,但由于管理员要求重置初始默认密码,因此被迫重置密码。 例如:在此用户中既没有会话,也没有传递任何激活码来验证。 login方法验证用户ID /默认密码并重定向到resetpassword映射(method = GET)。

  4. 系统如何验证用户请求并允许他重置密码?

    另一种方法是,使用flash属性并将authenticationKey设置为flash属性...可以在resetpassword方法中验证。

    还有其他方法来实现这个....

    注意:我在实施此方法时发布了一个问题 发布: Spring:如何在使用ModelAttribute重定向期间传递Java对象

    任何帮助?

1 个答案:

答案 0 :(得分:0)

我认为实现这一点的最佳方法是使用三种不同的操作方法:

  • resetPassword(电子邮件)
  • resetLoggedUserPassword(通过设置)
  • changeDefaultPassword

他们甚至可能会分享相同的观点,但行为并不相同,所以我会避免超出行动责任。

编辑:详细说明你的评论:

1)要保护电子邮件链接,一种方法是添加身份验证令牌。令牌可以像散列用户ID一样弱,加上一些盐字符串,或者与用户请求重置密码时生成的数据库表中具有过期时间的GUID一样强。

2)考虑到用户已经登录,设置方式不是问题。

3)如果您将用户置于会话中,则可以采用与1相同的方式保护临时密码操作,或者以与2相同的方式保护临时密码操作。如果验证帐户状态的代码位于请求过滤器内,则即使使用默认密码状态登录用户也不应该担心。