java隨記

          堅(jiān)持就是勝利!

           

          springboot中action綁定ServletRequest的attirbute的值傳參

          有些時(shí)候需要在后臺(tái)處理一封裝一些參數(shù)送到action中便于業(yè)務(wù)處理.比于app中的token驗(yàn)證,
          根據(jù)token查找到對(duì)應(yīng)的用戶信息。比如分布式框架中獲取用戶信息等.springboot中可以自
          定義參數(shù)解析器來綁定參數(shù),通過它可以拿到ServletRequest中的attirbute中的值進(jìn)行參數(shù)
          綁定。

          自定義一個(gè)annotation,通過這個(gè)注解中的 name查找attribute中的key對(duì)應(yīng)的值 

          import java.lang.annotation.ElementType;
          import java.lang.annotation.Retention;
          import java.lang.annotation.RetentionPolicy;
          import java.lang.annotation.Target;
          @Target(ElementType.PARAMETER)
          @Retention(RetentionPolicy.RUNTIME)
          public @interface AttributeResolve {
          String name() default "user";
          }

          自定義一個(gè)解析器類

          import javax.servlet.http.HttpServletRequest;
          import org.springframework.core.MethodParameter;
          import org.springframework.web.bind.support.WebDataBinderFactory;
          import org.springframework.web.context.request.NativeWebRequest;
          import org.springframework.web.method.support.HandlerMethodArgumentResolver;
          import org.springframework.web.method.support.ModelAndViewContainer;
          public class AttributeArgumentResolver implements HandlerMethodArgumentResolver{
          @Override
          public Object resolveArgument(MethodParameter arg0, ModelAndViewContainer arg1, NativeWebRequest arg2,
          WebDataBinderFactory arg3) throws Exception {
          // TODO Auto-generated method stub
          Object resultObj=null;
           AttributeResolve mp =  arg0.getParameterAnnotation(AttributeResolve.class);
           if(mp!=null) {
          String attributeName= mp.name();
          HttpServletRequest request = arg2.getNativeRequest(HttpServletRequest.class);
          resultObj = request.getAttribute(attributeName);
           }
          return resultObj;
          }
          @Override
          public boolean supportsParameter(MethodParameter arg0) {
          // TODO Auto-generated method stub
          return  arg0.hasParameterAnnotation(AttributeResolve.class);
          }

          springboot中注冊(cè)自定義的參數(shù)解析器
          @Configuration
          public class MyWebMvcConfig extends WebMvcConfigurerAdapter{
          public void addArgumentResolvers(List<HandlerMethodArgumentResolver> argumentResolvers) {
                  argumentResolvers.add(new AttributeArgumentResolver());
              }
          }


          使用方法.
          需要在action調(diào)用前向HttpServletRequest中的attribute中注入值 ,可以自定義一個(gè)filter,在filter中進(jìn)行處理
          如在filter中處理app傳過來的token驗(yàn)證后取得對(duì)應(yīng)的用戶信息等.下面例子簡(jiǎn)單放入一個(gè)對(duì)象
          @WebFilter(filterName = "axssFilter", urlPatterns = "/*",
          initParams = {
          @WebInitParam(name = "ignores", value = "*.js,*.gif,*.jpg,*.bmp,*.png,*.css,*.ico,/druid/*")// 忽略資源
          }
          )
          public class XssFilter implements javax.servlet.Filter{
          private Set<String> prefixIignores = new HashSet<String>();
          @Override
          public void destroy() {
          // TODO Auto-generated method stub
          }
          @Override
          public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain)
          throws IOException, ServletException {
          // TODO Auto-generated method stub
          HttpServletRequest request = (HttpServletRequest) req;
          HttpServletResponse response = (HttpServletResponse) res;
                      Blogger user = new Blogger();
                    user.setUsername("asfdasdf");
                   request.setAttribute("user", user);
                         chain.doFilter(request, response);  
          }
          }

          action獲取attribute中放入的對(duì)象
                  @RequestMapping("/index")
          public String index(@AttributeResolve(name="user") Bloggerbh, HttpServletRequest request,Model model) 

          嗯,還算優(yōu)雅


          posted on 2017-09-29 11:58 傻 瓜 閱讀(1712) 評(píng)論(0)  編輯  收藏 所屬分類: 雜項(xiàng)

          導(dǎo)航

          統(tǒng)計(jì)

          常用鏈接

          留言簿(7)

          我參與的團(tuán)隊(duì)

          隨筆分類

          隨筆檔案

          文章分類

          友情鏈接

          搜索

          積分與排名

          最新評(píng)論

          閱讀排行榜

          評(píng)論排行榜

          主站蜘蛛池模板: 苗栗县| 阜宁县| 崇州市| 洞口县| 兴化市| 祁东县| 吉隆县| 叙永县| 邻水| 大足县| 扶沟县| 绍兴县| 西乌珠穆沁旗| 若尔盖县| 维西| 水城县| 昌乐县| 凉城县| 新闻| 会宁县| 沅江市| 涿鹿县| 云浮市| 两当县| 赣榆县| 乌苏市| 五大连池市| 安康市| 酉阳| 蒙城县| 乳山市| 玛多县| 巩留县| 东丽区| 乾安县| 桦南县| 沁源县| 会宁县| 独山县| 安岳县| 鹰潭市|