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ù)解析器來(lái)綁定參數(shù),通過(guò)它可以拿到ServletRequest中的attirbute中的值進(jìn)行參數(shù)
          綁定。

          自定義一個(gè)annotation,通過(guò)這個(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傳過(guò)來(lái)的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 傻 瓜 閱讀(1724) 評(píng)論(0)  編輯  收藏 所屬分類: 雜項(xiàng)

          導(dǎo)航

          統(tǒng)計(jì)

          常用鏈接

          留言簿(7)

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

          隨筆分類

          隨筆檔案

          文章分類

          友情鏈接

          搜索

          積分與排名

          最新評(píng)論

          閱讀排行榜

          評(píng)論排行榜

          主站蜘蛛池模板: 孝昌县| 深州市| 鹤岗市| 益阳市| 乾安县| 甘南县| 株洲县| 繁峙县| 东兰县| 五河县| 乌拉特中旗| 太白县| 扶余县| 铜鼓县| 黔西县| 宁都县| 香港| 丹东市| 北安市| 永新县| 阿拉善左旗| 奉化市| 彰化市| 衡阳市| 西峡县| 延津县| 汤原县| 浪卡子县| 祁阳县| 深水埗区| 体育| 鲁甸县| 江城| 邳州市| 鄂伦春自治旗| 东宁县| 义乌市| 竹山县| 涪陵区| 忻城县| 新龙县|