【问题标题】:How to implement Session Tracking in spring MVC?如何在 Spring MVC 中实现 Session Tracking?
【发布时间】:2018-03-01 07:16:37
【问题描述】:

我对 Spring mvc 很陌生,我必须开发一个基于会话跟踪的 Web 应用程序,并且我的应用程序是基于注释的。在我的网络应用程序中,我根据会话中存在的用户名和角色路由每个页面。最初我一直使用 HttpSession 作为控制器方法的参数,但是很难检查每个请求。我知道 spring 中有很多应用程序级别的安全方式,但我真的不明白如何使用它们。请建议我一些解决方案,提前感谢所有帮助。

使用拦截器更新后:

  Controller class

  // Method to showLogin page to user
@RequestMapping(value = "user")
public ModelAndView showLoginToUser(@ModelAttribute("VMFE") VmFeUser VMFE,HttpSession session) {
    System.out.println("@C====>showLoginToUser()===> ");
    ModelAndView view = new ModelAndView();
    //session.setAttribute("user_name", "no_user");
    try {
        view.setViewName("login");
    } catch (Exception e) {
        e.printStackTrace();
    }
    return view;
}

  Interceptor

  public class HelloWorldInterceptor extends HandlerInterceptorAdapter {
   @Override
public boolean preHandle (HttpServletRequest request,
                          HttpServletResponse response,
                          Object handler) throws Exception {
    RequestMapping rm = ((HandlerMethod) handler).getMethodAnnotation(
                        RequestMapping.class);

    boolean alreadyLoggedIn = request.getSession()
                                     .getAttribute("user_name") != null;
    boolean loginPageRequested = rm != null && rm.value().length > 0
                                          && "login".equals(rm.value()[0]);


    if (alreadyLoggedIn && loginPageRequested) {
        //response.sendRedirect(request.getContextPath() + "/app/main-age");
        return false;
    } else if (!alreadyLoggedIn && !loginPageRequested) {
        System.out.println("REDIRECTING===");
        response.sendRedirect(request.getContextPath() + "/user");
        return false;
    }

    return true;
}

}

【问题讨论】:

  • 我不太明白您要做什么,但是您可以使用此 @Scope(value="session") 来创建一个 bean 会话范围
  • 我需要检查每个请求的会话变量是否存在。
  • 啊,好吧。我想到的第一件事是使用一个会话范围的 bean,它包含你需要的所有值,因为它绑定到会话,所以不需要访问 HttpSession
  • 您可以为此尝试 Interceptor,在 Google 上搜索 Spring Session Interceptor,或者查看 this
  • 我猜来自@ShantaramTupe 的拦截器想法正是您正在寻找的。使用拦截器,您只有一个地方可以实现检查变量是否存在的逻辑。我认为以下链接将为您指明正确的操作方向:baeldung.com/spring-model-parameters-with-handler-interceptor

标签: spring spring-mvc session


【解决方案1】:

使用 Spring Security,您可以实现会话跟踪并应用过滤器来验证请求。 Spring 安全性非常容易实现。请关注 spring 安全教程click here。 你也可以查看我的 git repo 的实现click here。这是一个有角度的 Spring Boot 应用程序,我使用 Spring Security 和 JWT 进行身份验证和授权。

希望对你有帮助,谢谢。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-02-29
    • 2016-03-12
    • 2023-03-17
    • 2013-09-18
    • 1970-01-01
    • 2018-07-07
    • 2010-11-12
    • 1970-01-01
    相关资源
    最近更新 更多