Why in spring return ModelAndView prompting to download .json of view name? -


i have written controller navigate page named accessdenied.jsp. using spring 4.3.6 version

@controller public class batchaccessdeniedcontroller {  static string errorpage = "accessdenied";  public static final logger log = logger.getlogger(batchaccessdeniedcontroller.class);  @requestmapping(value = "/accessdenied" , method = requestmethod.get) public modelandview accessdenied(principal user, modelandview modelandview) {      //log user tried access restricted resource     if (user != null) {         log.info(user.getname() + " not have permission access page!");     } else {         log.info("you not have permission access page!");     }     modelandview.setviewname(errorpage);     return modelandview; } } 

everything works fine above code until introduce spring batch admin dependency , batch admin configuration in web.xml bellow

<context-param>     <param-name>contextconfiglocation</param-name>     <param-value>         classpath:/root-context.xml,         classpath*:/org/springframework/batch/admin/web/resources/webapp-config.xml,         classpath:/config/spring-ldap-servlet.xml     </param-value> </context-param>  <!-- filter spring security ldap --> <filter>     <filter-name>springsecurityfilterchain</filter-name>     <filter-class>org.springframework.web.filter.delegatingfilterproxy</filter-class> </filter>  <filter>     <filter-name>shallowetagheaderfilter</filter-name>     <filter-class>org.springframework.web.filter.shallowetagheaderfilter</filter-class> </filter>  <filter>     <filter-name>hiddenhttpmethodfilter</filter-name>     <filter-class>org.springframework.web.filter.hiddenhttpmethodfilter</filter-class> </filter>  <filter-mapping>     <filter-name>springsecurityfilterchain</filter-name>     <url-pattern>/*</url-pattern> </filter-mapping>  <filter-mapping>     <filter-name>shallowetagheaderfilter</filter-name>     <url-pattern>/*</url-pattern> </filter-mapping>  <filter-mapping>     <filter-name>hiddenhttpmethodfilter</filter-name>     <url-pattern>/*</url-pattern> </filter-mapping>  <listener>     <listener-class>org.springframework.web.context.contextloaderlistener</listener-class> </listener>  <listener>     <listener-class>org.springframework.web.util.log4jconfiglistener</listener-class> </listener>  <servlet>     <servlet-name>runlauncher</servlet-name>     <servlet-class>         org.springframework.web.servlet.dispatcherservlet     </servlet-class>     <init-param>         <param-name>contextconfiglocation</param-name>         <param-value>             classpath:/config/application-web-context.xml,             classpath*:/org/springframework/batch/admin/web/resources/servlet-config.xml         </param-value>     </init-param>     <load-on-startup>1</load-on-startup> </servlet>  <servlet-mapping>     <servlet-name>runlauncher</servlet-name>     <url-pattern>/*</url-pattern> </servlet-mapping>   <!-- invalidate user session after 15 minutes of inactivity --> <session-config>     <session-timeout>15</session-timeout> </session-config>  <welcome-file-list>     <welcome-file>index.jsp</welcome-file> </welcome-file-list> 

batch admin dependency below

<dependency>         <groupid>org.springframework.batch</groupid>         <artifactid>spring-batch-admin-manager</artifactid>         <version>${spring.batch.admin}</version>     </dependency>     <dependency>         <groupid>org.springframework.batch</groupid>         <artifactid>spring-batch-admin-resources</artifactid>         <version>${spring.batch.admin}</version>     </dependency> 

by adding this, thought control come batchaccessdeniedcontroller class, prompt download index.json file. not understanding why asking download index.json file rather redirecting accessdenied.jsp page. have configuration spring-ldap in index.jsp default page after user login.

i suspect wrong batch admin ui causing issue. if has faced similar issue, please me getting rid of this.

here link snapshot of download icon displayed. index.json file

finally after lot of research found fix. runlauncher servlet configured having 2 servlet xml files.

  1. classpath*:/org/springframework/batch/admin/web/resources/servlet-config.xml
  2. classpath:/config/application-web-context.xml,

the first xml file spring-batch-admin-domain jar , second xml file file configured in application level

spring batch admin ui internally having jsonviewresolver configured inside spring-batch-admin-manager.jar. since jsonviewresolver taking precendence on internalresouceviewresolver configured in application-web-context.xml, using modelandveiw prompting download .json of view name returned in modelandview

this issue resolved creating 2 separate servlets each xml configuration files , having different mapping below

<servlet>     <servlet-name>runlauncher</servlet-name>     <servlet-class>         org.springframework.web.servlet.dispatcherservlet     </servlet-class>     <init-param>         <param-name>contextconfiglocation</param-name>         <param-value>             classpath:/config/application-web-context.xml         </param-value>     </init-param>     <load-on-startup>1</load-on-startup> </servlet>  <servlet>     <servlet-name>batch servlet</servlet-name>     <servlet-class>         org.springframework.web.servlet.dispatcherservlet     </servlet-class>     <init-param>         <param-name>contextconfiglocation</param-name>         <param-value>             classpath*:/org/springframework/batch/admin/web/resources/servlet-config.xml         </param-value>     </init-param>     <load-on-startup>1</load-on-startup> </servlet>  <servlet-mapping>     <servlet-name>runlauncher</servlet-name>     <url-pattern>/batch/*</url-pattern> </servlet-mapping>   <servlet-mapping>     <servlet-name>batch servlet</servlet-name>     <url-pattern>/</url-pattern> </servlet-mapping> 

so having 2 servlets 1 servlet used spring batch admin ui url mapping "/" intercept incoming request "/" followed mapping. servlet intercept matching requests "/batch/*.

in way requests come batch servlet uses jsonviewresolver , requests "/batch/*" configured application-web-context.xml uses internalresourceviewresolver. solved problem.


Comments

Popular posts from this blog

Is there a better way to structure post methods in Class Based Views -

performance - Why is XCHG reg, reg a 3 micro-op instruction on modern Intel architectures? -

jquery - Responsive Navbar with Sub Navbar -