2017-05-09 10 views
0

私は、HTMLファイル(JSP)にSpring SecurityとBootstrapを持つSpring MVCアプリケーションを構築しています。そのMIMEタイプ( 'text/plain')が実行可能でなく、厳密なMIMEタイプチェックが有効になっているためです。

は、私は現在、私のアプリケーションでは、次のエラーを修正するために働いています:

「そのMIMEタイプ ( 『text/htmlの』)が実行可能ではないので、 『http://localhost:8080/App/Template/js/modernizr.min.js』 からスクリプトを実行するために拒否し、厳密なMIMEタイプチェックは です。 (アプリのログインページ)

上記のエラーメッセージは、Chrome開発者コンソールからのものです。

ここでは基本的な構成

@Configuration 
@EnableWebSecurity 
@EnableGlobalMethodSecurity(securedEnabled=true) 
public class WebSecurityConfig extends WebSecurityConfigurerAdapter{ 

@Autowired 
     protected void globalConfig(AuthenticationManagerBuilder auth, DataSource dataSource) throws Exception { 
    //auth.inMemoryAuthentication().withUser("user").password("123").roles("USER"); 
     auth.jdbcAuthentication() 
      .dataSource(dataSource) 
      //.passwordEncoder(passwordEncoder()) décrupt paswd 
      .usersByUsernameQuery("select username as principal, password as credentials, etat as actived from utilisateurs where username=?") 
      .authoritiesByUsernameQuery("select u.username as principal, ur.nom_role as role from utilisateurs u inner join roles ur on(u.roles_id=ur.id_role) where u.username=?") 
      .rolePrefix("ROLE_"); 
    } 

@Bean 
    public PasswordEncoder passwordEncoder(){ 
     PasswordEncoder encoder = new BCryptPasswordEncoder(); 
     return encoder; 
    } 

    @Override 
    public void configure(WebSecurity web) throws Exception { 
     web.ignoring().antMatchers("/resources/**"); 
    } 

protected void configure(HttpSecurity http) throws Exception { 

     http 
      .sessionManagement().maximumSessions(100).maxSessionsPreventsLogin(false).expiredUrl("/Login"); 
      http 
      .authorizeRequests() 
      .antMatchers("/images/**","/pdf/**","/Template/**","/Views/**","/MainApp.js","/css/**", "/js/**").permitAll() 
      .antMatchers("/Users/**").access("hasRole('ADMIN')") 
      .antMatchers("/Login").anonymous() 
      .anyRequest().authenticated() 
      .and() 
      .exceptionHandling().accessDeniedPage("/403") 
      .and() 
      .formLogin().loginPage("/Login").permitAll() 
      .defaultSuccessUrl("/") 
      .failureUrl("/Login?error=true") 
       .and() 
       .csrf() 
       .and() 
       .rememberMe().tokenRepository(persistentTokenRepository()) 
       .tokenValiditySeconds(360000); 
    } 

@Autowired 
DataSource dataSource; 

@Bean 
public PersistentTokenRepository persistentTokenRepository() { 
     JdbcTokenRepositoryImpl db = new JdbcTokenRepositoryImpl(); 
     db.setDataSource(dataSource); 
     return db; 
    } 

} 

- APPConfigurationApplication.java

@SpringBootApplication 
@ComponentScan 
@ImportResource("SpringBeans.xml") 
public class APPConfigurationApplication extends SpringBootServletInitializer { 

    protected SpringApplicationBuilder configure(SpringApplicationBuilder application) { 
     return application.sources(APPConfigurationApplication.class); 
    } 

    public static void main(String[] args) { 
     SpringApplication.run(APPConfigurationApplication.class, args); 

    } 

- MvcConfig.java

@Configuration 
public class MvcConfig extends WebMvcConfigurerAdapter{ 
@Override 
public void configureDefaultServletHandling(
    DefaultServletHandlerConfigurer configurer) { 
      configurer.enable(); 

} 
} 
-

は、ここでリクエストのレスポンスヘッダです:

Request URL:http://localhost:8080/App/Login 

Request Method:GET 

Status Code:200 

Remote Address:[::1]:8080 

Referrer Policy:no-referrer-when-downgrade 

Response Headers 

view source 

Cache-Control:no-cache, no-store, max-age=0, must-revalidate 

Content-Language:fr-FR 

Content-Length:4289 

Content-Type:text/html;charset=UTF-8 

Date:Tue, 09 May 2017 09:18:15 GMT 

Expires:0 

Pragma:no-cache 

X-Content-Type-Options:nosniff 

X-Frame-Options:DENY 

X-XSS-Protection:1; mode=block 

Request Headers 

view source 

Accept:text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8 

Accept-Encoding:gzip, deflate, sdch, br 

Accept-Language:fr-FR,fr;q=0.8,en-US;q=0.6,en;q=0.4 

AlexaToolbar-ALX_NS_PH:AlexaToolbar/alx-4.0.1 

Cache-Control:max-age=0 

Connection:keep-alive 

Cookie:JSESSIONID=6DDBA94C937FADFB889C8CFDDD9E47A3 

Host:localhost:8080 

Upgrade-Insecure-Requests:1 

User-Agent:Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, 

like Gecko) Chrome/57.0.2987.133 Safari/537.36 

が、このエラーは、アプリケーションがブラウザで初めて開かれただけを発生します。ログインしてからログインページに戻ると、エラーは発生しません。

EDIT1:

-Web.xml:ここ

<?xml version="1.0" encoding="UTF-8"?> 
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://xmlns.jcp.org/xml/ns/javaee" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd" version="3.1"> 
    <display-name>Audit_Configuration</display-name> 
    <welcome-file-list> 
    <welcome-file>index.html</welcome-file> 
    <welcome-file>index.htm</welcome-file> 
    <welcome-file>index.jsp</welcome-file> 
    <welcome-file>default.html</welcome-file> 
    <welcome-file>default.htm</welcome-file> 
    <welcome-file>default.jsp</welcome-file> 
    </welcome-file-list> 

    <servlet> 
    <servlet-name>DefaultServlet</servlet-name> 
    <servlet-class>org.eclipse.jetty.servlet.DefaultServlet</servlet-class> 
</servlet> 

<!-- DEFAULT --> 
<servlet-mapping> 
    <servlet-name>DefaultServlet</servlet-name> 
    <url-pattern>/Template/css/*</url-pattern> 
</servlet-mapping> 

<servlet-mapping> 
    <servlet-name>js</servlet-name> 
    <url-pattern>/Template/js/*</url-pattern> 
</servlet-mapping> 

<servlet-mapping> 
    <servlet-name>DefaultServlet</servlet-name> 
    <url-pattern>/images/*</url-pattern> 
</servlet-mapping> 

<servlet-mapping> 
    <servlet-name>DefaultServlet</servlet-name> 
    <url-pattern>/pdf/*</url-pattern> 
</servlet-mapping> 

</web-app> 

が "静的" での私のファイルです

here path files

どのように設定する必要があります春のセキュリティ私/静的リソースからcss/jsファイルをロードできることディレクトリ?

+0

このhttp://stackoverflow.com/a/34282044/7081346を見てみましょう。 –

+0

返信ありがとうございます@Jayesh、** web.xml **ファイルをリンクのように設定しようとしましたが、同じ問題が残っています:コードJSが機能しません – Michael1

+0

は 'サーブレット名) –

答えて

0

ソリューションは、web.xmlファイルにこのコードを追加することです:

<servlet> 
    <servlet-name>js</servlet-name> 
    <servlet-class>org.a‌​pache.catalina.servl‌​ets.DefaultServlet</‌​servlet-class> 
</serv‌​let> 
<servlet-mapping‌​> 
    <servlet-name>js</s‌​ervlet-name> 
    <url-pat‌​tern>*.js</url-patte‌​rn> 
</servlet-mapping‌​> 
関連する問題