spring系統學習--spirngMVC之session管理
阿新 • • 發佈:2018-11-19
繼續把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>
測試:
在沒有登陸的情況下操作:
將被重定向到登陸頁面(我這裡實際上是重定向到登陸成功介面):
之後再訪問所有的資源:
一切正常!