spring系统学习--spirngMVC之session管理

   继续把spirngmvc的关于session管理的笔记记一下。

第一步:  新建相关处理逻辑的控制器:

package com.automannn.springMVC_practice.controller;

import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.*;

import javax.servlet.http.HttpSession;

/**
 * @author [email protected]
 * @time 2018/11/6 13:05
 */
@Controller
@SessionAttributes({"currUser"})
@RequestMapping("/user")
public class UserController {

    @GetMapping(value = "/login")
    public String login(String username, String password, Model model) {
        String s = "{'username':"+username+",'password':"+password+"}";
        model.addAttribute("currUser",s);
        return "userdetail";
    }


    @ResponseBody
    @GetMapping(value = "/dologic",produces = "application/json;charset=utf-8")
    public String dologic(HttpSession session) {

        Object o = session.getAttribute("currUser");
        if (o != null) {
            return "session:" + o;
        } else {
            return "该session为空!";
        }
    }


    @ResponseBody
    @GetMapping(value = "/logout")
    public String logout( HttpSession session) {
        session.invalidate();
        return "success";
    }

}

    注意,这有个HttpSession,这个依赖在tomcat容器中是自带的。  但是我们这里不得不屈服于它的淫威。 因为不引入的话编译通过不了。    

   这里的关键是:@SessionAttributes(String[])注解。  它是针对整个控制器的 。   它的内容来源是: Model中自动注入。比如这里的例子。。 

   为了方便起见,我将所有的服务都设置成get方法。  这样方便测试:

  登陆成功的逻辑,返回自己的登陆页面:

   这时候访问doLogic:

   

  当我去登出: logout:

 然后访问doLogic:

   这样,实际上springMvc就提供了一种聚合在用户的controller的一个session管理。 便于业务逻辑的开展。

通常为了完成登陆认证授权等功能,我们需要限制用户强制登陆,因此可以定义一个过滤器:

package com.automannn.springMVC_practice.filter;


import javax.servlet.*;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;

/**
 * @author [email protected]
 * @time 2018/11/6 13:34
 */
public class LoginFilter implements Filter {

    public void init(FilterConfig filterConfig) throws ServletException {

    }

    public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
        HttpServletRequest hsq = (HttpServletRequest) request;

       Object o= hsq.getSession().getAttribute("currUser");
       if (o==null){
           ((HttpServletResponse)response).sendRedirect(hsq.getContextPath()+"/user/login?username=111&password=222");
       }
       chain.doFilter(request,response);
    }

    public void destroy() {

    }
}

   注意,我的过滤逻辑是,当session没有该用户信息,就默认先必须登陆。   由于我这里知识一种逻辑上的操作,所以用户名与密码是写死的。

    然后将之配在web.xml中,相当于在tomcat容器中注册该过滤器。  表示针对user下的所有的资源路径,我都要进行登陆认证。

 <filter>
        <filter-name>loginFilter</filter-name>
        <filter-class>com.automannn.springMVC_practice.filter.LoginFilter</filter-class>
    </filter>

    <filter-mapping>
        <filter-name>loginFilter</filter-name>
        <url-pattern>/user/*</url-pattern>
    </filter-mapping>

测试:

      在没有登陆的情况下操作:

将被重定向到登陆页面(我这里实际上是重定向到登陆成功界面):

之后再访问所有的资源:

   

一切正常!

猜你喜欢

转载自blog.csdn.net/qq_36285943/article/details/83789365