場景: springmvc 的請求入參能夠用@RequestParam 、@ModelAttribute等來自動獲取,但如今有個需求去根據請求參數裏的token去獲取自定義的Session,而後能夠綁定到方法的參數上,而不須要用靜態方法去本身獲取。 java
修改前: web
@RequestMapping() public String test(@RequestParam(requeired = false) String token) { /*意味着每一個須要session的地方都須要本身手動獲取*/ Session session =SessionUtil.getSession(token); }修改後:
@RequestMapping() public String test(@ModelAttribute("session")Session session) { /*這裏能夠直接調用*/ session.doSomeThing(); }具體方法有三個(我目前所能找到的):
1. spring
@ModelAttribute public void getSession(HttpServletRequest request,Model model) { String token = request.getParameter(GlobalStatic.token_name); if (Strings.isNullOrEmpty(token)) { model.addAttribute("session", null); } else { System.out.println((String)token); model.addAttribute("session", sessionFactory.getSession(token)); } }這個bind方法能夠放在父類Controller裏面,你能夠根據需求處理沒有token的狀況。還有就是這個方法還有一些變化,能夠參照:
http://blog.csdn.net/li_xiao_ming/article/details/8349115
2. session
<mvc:annotation-driven > 修改request過來的參數,能夠實現相似於往parameter裏添加參數的功能 <mvc:argument-resolvers> <bean class="TokenHandler"></bean> </mvc:argument-resolvers> </mvc:annotation-driven>
這裏能夠配置paramHandler來處理入參,具體代碼以下: mvc
public class TokenHandler implements WebArgumentResolver { @Override public Object resolveArgument(MethodParameter methodParameter,NativeWebRequest webRequest) throws Exception { if (methodParameter.getParameterName().equals("token")) { return new Session(); } return null; } }
3.使用HttpServletRequestWrapper來包裝request,而後在filter的chain.dofilter裏包裝下。 app