`
cargoj
  • 浏览: 59010 次
  • 性别: Icon_minigender_1
  • 来自: 重庆
社区版块
存档分类
最新评论

redirect如何让url忽略model

阅读更多

本文翻译自http://stackoverflow.com/questions/2163517/how-do-i-prevent-spring-3-0-mvc-modelattribute-variables-from-appearing-in-url

 

三种方式:拦截器、viewresolver、redirect前model.asMap().clear()清除modelmap

 

1.拦截器中处理

 

     public class CommonModelMapInformationInterceptor implements
    HandlerInterceptor {

    // This method is unused as this Interceptor is for post handle only
    public void afterCompletion(HttpServletRequest request,
    HttpServletResponse response, Object handler, Exception ex)
    throws Exception { }

    // This method is unused as this Interceptor is for post handle only
    public boolean preHandle(HttpServletRequest request,
    HttpServletResponse response, Object handler) throws Exception {
    return true;
    }

    public void postHandle(HttpServletRequest request,
    HttpServletResponse response, Object handler,
    ModelAndView modelAndView) throws Exception {

    boolean isRedirectView = modelAndView.getView() instanceof RedirectView;
    boolean isViewObject = modelAndView.getView() == null;
    // if the view name is null then set a default value of true
    boolean viewNameStartsWithRedirect = (modelAndView.getViewName() == null ? true : modelAndView.getViewName().startsWith(UrlBasedViewResolver.REDIRECT_URL_PREFIX));

    if(modelAndView.hasView() && (
    ( isViewObject && !isRedirectView) ||
    (!isViewObject && !viewNameStartsWithRedirect))){
    addCommonModelData(modelAndView);
    }
    }

    public void addCommonModelData(ModelAndView modelAndView){
    modelAndView.addObject(“stuff”, “importantStuff”);
    modelAndView.addObject(“moreStuff”, “moreImportantStuff”);
    }
    }

 

 

2.viewresolver中处理

   我自己用的是继承自InternalResourceViewResolver,

   分别介绍两种方式:

   1)可以在需要忽略model的时候改用 redirectWithoutModel来做跳转

public class RedirectViewResolver implements ViewResolver, Ordered {
    // Have a highest priority by default
    private int order = Integer.MIN_VALUE; 

    // Uses this prefix to avoid interference with the default behaviour
    public static final String REDIRECT_URL_PREFIX = "redirectWithoutModel:";     

    public View resolveViewName(String viewName, Locale arg1) throws Exception {
        if (viewName.startsWith(REDIRECT_URL_PREFIX)) {
            String redirectUrl = viewName.substring(REDIRECT_URL_PREFIX.length());
            return new RedirectView(redirectUrl, true, true, false);
        }
        //return null;//此处原文返回空
        return super.resolveViewName(viewName, arg1);
    }

    public int getOrder() {
        return order;
    }

    public void setOrder(int order) {
        this.order = order;
    }
}

   2)当整个应用都不希望带model跳转,可以更简单的实现

  

public class RedirectsNotExposingModelUrlBasedViewResolver extends UrlBasedViewResolver {

    @Override
    protected View createView(String viewName, Locale locale) throws Exception {
        View view = super.createView(viewName, locale);
        if (view instanceof RedirectView) {
            ((RedirectView) view).setExposeModelAttributes(false);
        }
        return view;
    }

}

 

-----------------------------------------------------------------------------------------------

3.1以后还可以设置ignoreDefaultModelOnRedirect属性为true

分享到:
评论

相关推荐

    linux内核实现url重定向

    9. 变量 `fqdn_redirect_url`,`url_redirect_data` 和 `url_redirect_default`:它们分别存储完全限定的域名(FQDN)形式的重定向URL、用户自定义的重定向URL数据和默认的重定向URL数据。 在Linux内核中实现URL...

    Nginx之proxy_redirect使用详解

    正则表达式能够帮助我们提取或忽略URL路径中的某些部分,实现更灵活的重定向处理。此外,我们还要注意Nginx的版本兼容性问题,因为proxy_redirect指令在不同版本的Nginx中可能有不同的表现。 在实际部署时,proxy_...

    URLRewrite URL重写组件

    2. **Redirect**:将请求的URL重定向到另一个URL,浏览器地址也会更新。 ### 四、条件匹配与条件组 URLRewrite规则可以包含多个条件,用于确定何时应用规则。条件可以是请求的URL、查询字符串、HTTP头等。逻辑组...

    Asp.Net URL重写-URLReWrite

    <action type="Redirect" url="/newpage.aspx" redirectType="Permanent" /> ``` **5. 使用正则表达式** URL重写规则可以利用正则表达式进行复杂的匹配。例如,以下规则将所有以`/news/`开头,后面跟随一...

    C# url重写 C# url重写

    <action type="Redirect" url="/newpage" redirectType="Permanent" /> ``` 这样,当用户访问`/oldpage.aspx`时,IIS会自动将其重定向至`/newpage`。 2. **ASP.NET MVC路由**: 在ASP.NET MVC框架中,...

    .net Url重写示例

    <action type="Redirect" url="{R:1}" redirectType="Permanent" /> ``` 这个规则会捕获以".aspx"结尾的URL,然后去掉后缀并重定向至新URL。 其次,对于ASP.NET MVC和Web API,我们可以使用Route类来定义...

    UrlRewrite.dll

    UrlRewrite.dll是微软IIS(Internet Information Services)服务器中的一个关键组件,主要负责URL重写功能。在网站开发和管理中,它扮演着至关重要的角色,尤其在优化搜索引擎优化(SEO)、实现友好的URL结构以及...

    IIS 中使用rewrite插件进行url重写

    $`,而Rewrite URL则设置为`/Redirect.aspx$1`。这里的`(.+)`捕获了查询字符串,并用`$1`在Rewrite URL中引用它,确保原始参数得以保留。 例如,如果用户访问`...

    微软URL重写文件

    <action type="Redirect" url="/newpage" redirectType="Permanent" /> ``` 3. **定义重写规则**:在上述配置中,`<match>`元素定义了匹配旧URL的模式,而`<action>`元素定义了如何重定向到新URL。 4. **...

    urlEncode or urlDecode

    在IT行业中,`urlEncode` 和 `urlDecode` 是两个非常关键的概念,它们主要用于处理URL(统一资源定位符)中的特殊字符。理解这两个概念对于网页开发、数据传输以及网络编程至关重要。 `urlEncode` 是一个过程,它将...

    谷歌 new tab redirect插件

    “绿盟-首页.url”文件看起来像是一个快捷方式,它可能指向了一个网络安全服务提供商的首页,与New Tab Redirect插件本身无关,但可能被一同提供,用于提醒用户关注网络安全,确保在使用插件的同时,保护自己的在线...

    follow-redirect-url:一个简单的命令行实用程序,可让您进行重定向以查看http URL的最终位置。 对缩短网址有用

    一个简单的命令行实用程序,可让您进行重定向以查看http URL的最终位置。 对于缩短的网址很有用。 最多跟踪20个重定向默认值。 还向请求添加了User-Agent标头,如果没有浏览器信息,某些网址将不会重定向,例如:...

    spring学习: spring mvc在redirect请求中传递数据

    - **URL参数**:可以将数据附加到重定向URL后面,以查询字符串的形式传递,如`redirect:/target?param1=value1&param2=value2`。 - **模型属性**:使用`RedirectAttributes`接口,它允许我们在重定向时添加模型...

    UrlRwrite重写

    <action type="Redirect" url="/new-page/{R:1}" redirectType="Permanent" /> ``` 在这个例子中,`{R:1}`是一个后向引用,表示第一个括号内匹配的内容。 四、UrlRewrite的实际应用 1. **URL路由**:在ASP.NET ...

    urlrewrite重写URL伪静态请求路径.

    标题 "urlrewrite重写URL伪静态请求路径" 涉及到的是Web开发中的一个重要概念——URL重写,这是为了优化网站的SEO(搜索引擎优化)和用户体验而进行的一种技术手段。URL重写允许我们将复杂的动态URL转换为简洁、易于...

    urlrewrite-maven-example.zip

    3. **Action**:动作部分,如`<redirect>`或`<forward>`标签,定义了URL重写后的目标地址。 例如,以下规则将所有以`/old`开头的URL重定向到对应的`/new`路径: ```xml ^/old/(.*)$ <to type="redirect">/new/$...

    微擎公众号模块提示redirect-uri协议与后台配置不一致错误码10039 的解决办法

    微擎公众号模块提示redirect_uri协议与后台配置不一致错误码10039 的解决办法

    IIS URL 重写模块工具

    <action type="Redirect" url="/articles/{R:1}" appendQueryString="false" /> ``` 2. **高级规则**:可以利用正则表达式实现更复杂的重写,如处理参数、URL编码等。 **四、IIS URL重写模块与其他IIS插件的...

    Aspnet Mvc教程 17.UpdateModel

    Aspnet Mvc教程 12.URLRouting简介 02:58 Aspnet Mvc教程 14. Filter 05:11 Aspnet Mvc教程 13.Helper初体验 04:53 Aspnet Mvc教程 15.QueryString传值 06:18 Aspnet Mvc教程 16.表单生成及Post传值 07:20 ...

    UrlRewrite实现伪静态

    - `<redirect>`重定向:将请求转发到其他URL。 - `<forward>`转发:内部转发,不改变浏览器地址栏。 - `<append-query>`追加查询参数:在重写URL时,保留或追加原始的查询参数。 6. **注意事项**: - 配置文件...

Global site tag (gtag.js) - Google Analytics