springboot中action綁定ServletRequest的attirbute的值傳參
有些時候需要在后臺處理一封裝一些參數送到action中便于業務處理.比于app中的token驗證,根據token查找到對應的用戶信息。比如分布式框架中獲取用戶信息等.springboot中可以自
定義參數解析器來綁定參數,通過它可以拿到ServletRequest中的attirbute中的值進行參數
綁定。
自定義一個annotation,通過這個注解中的 name查找attribute中的key對應的值
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";
}
自定義一個解析器類
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中注冊自定義的參數解析器
@Configuration
public class MyWebMvcConfig extends WebMvcConfigurerAdapter{
public void addArgumentResolvers(List<HandlerMethodArgumentResolver> argumentResolvers) {
argumentResolvers.add(new AttributeArgumentResolver());
}
}
使用方法.
需要在action調用前向HttpServletRequest中的attribute中注入值 ,可以自定義一個filter,在filter中進行處理
如在filter中處理app傳過來的token驗證后取得對應的用戶信息等.下面例子簡單放入一個對象
action獲取attribute中放入的對象
}
使用方法.
需要在action調用前向HttpServletRequest中的attribute中注入值 ,可以自定義一個filter,在filter中進行處理
如在filter中處理app傳過來的token驗證后取得對應的用戶信息等.下面例子簡單放入一個對象
@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中放入的對象
@RequestMapping("/index")
public String index(@AttributeResolve(name="user") Bloggerbh, HttpServletRequest request,Model model)
嗯,還算優雅
嗯,還算優雅
posted on 2017-09-29 11:58 傻 瓜 閱讀(1708) 評論(0) 編輯 收藏 所屬分類: 雜項