java之springmvc 验证包含 userobject 的 httpsession

Terrylee 阅读:46 2023-08-06 08:31:55 评论:0

我需要以更好的方式为我当前的项目验证 HttpSession(用于 Spring MVC 应用程序)。

这是场景:

1) 一旦用户验证成功,userObject对象被添加到httpSession类

HttpSession session = req.getSession(true); 
session.setAttribute(AppConstants.LOGGEDIN_PARAM, userDetail); 

2) 然后对于每个请求,从 HttpSession 类中检索 userObject 以验证用户 Session

@RequestMapping(value = "/apply", method = RequestMethod.GET) 
public String getTourApplyPage(HttpServletRequest req, ModelMap map) { 
    UserDetailTO userDetail = (UserDetailTO) req.getSession().getAttribute(AppConstants.LOGGEDIN_PARAM); 
    Long employeeId = userDetail.getUserType() == 1 ? userDetail.getEmployeeId():userDetail.getUserId(); 
    if (employeeId == 0) { 
        req.setAttribute(AppConstants.MSG_PARAM, "Invalid employee Id."); 
        return userDetail.getUserType() == 1 ? AppConstants.PIS_MESSAGE : AppConstants.ADMIN_PIS_MESSAGE; 
     } 
     ... 
}    

可以有更好的方法在 HttpSession 中设置 userDetail 对象,但我有一个限制,不能更改此实现(第 1 点)。

是否可以更改从 HttpSession 获取 userDetail 对象的更好实现(第 2 点)?

请您参考如下方法:

Is it possible to write a better implementation for getting a userDetail object from httpSession?

在如此高的抽象级别上工作,就像 Controller 一样,您不一定需要注入(inject) HttpServletRequestHttpSession

您可以使您的 Controller 具有 session 范围,并在那里注入(inject)一个具有 session 范围的 bean。该 bean 可以包含一个 userDetails 和一条验证失败的消息。

@RestController 
@Scope("session") 
public class Controller { 
 
    @Autowired 
    private SessionDetails details; 
 
    @PostMapping(path = "/validate") 
    public void validate() { 
        details.setUserDetails(...); 
    } 
 
    @GetMapping(path = "/apply") 
    public String apply() { 
        final UserDetailTO userDetails = details.getUserDetails(); 
        ... 
    } 
 
} 
 
@Component 
@Scope("session") 
class SessionDetails { 
    private String message; 
    private UserDetailTO userDetails; 
    // getters & setters 
} 


标签:springMVC
声明

1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,请转载时务必注明文章作者和来源,不尊重原创的行为我们将追究责任;3.作者投稿可能会经我们编辑修改或补充。

关注我们

一个IT知识分享的公众号