2016-06-29 12 views
3

私のブートストラップアプリケーション用のカスタムログインページを追加しようとしています。私はthisチュートリアルに従っていた。私は自分のカスタムログインページで作業をすることができませんでした。ここでspring bootカスタムログインページ

は私のpom.xmlです:

... 
<dependency> 
    <groupId>org.springframework.data</groupId> 
    <artifactId>spring-data-commons</artifactId> 
</dependency> 
<dependency> 
    <groupId>org.springframework.boot</groupId> 
    <artifactId>spring-boot-starter-test</artifactId> 
    <scope>test</scope> 
</dependency> 
<dependency> 
    <groupId>org.springframework.boot</groupId> 
    <artifactId>spring-boot-starter-security</artifactId> 
</dependency> 
<dependency> 
    <groupId>org.springframework.boot</groupId> 
    <artifactId>spring-boot-starter-thymeleaf</artifactId> 
</dependency> 
<dependency> 
    <groupId>org.apache.httpcomponents</groupId> 
    <artifactId>httpclient</artifactId> 
    <scope>test</scope> 
</dependency> 
... 

MvcConfig.java

import org.springframework.context.annotation.Configuration; 
import org.springframework.web.servlet.config.annotation.ViewControllerRegistry; 
import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter; 

@Configuration 
public class MvcConfig extends WebMvcConfigurerAdapter { 

    @Override 
    public void addViewControllers(ViewControllerRegistry registry) { 
     registry.addViewController("/").setViewName("forward:/index.html"); 

     registry.addViewController("/login").setViewName("login"); 
    } 

} 

FrontendApp.java:

import org.slf4j.LoggerFactory; 
import org.springframework.boot.SpringApplication; 
import org.springframework.boot.autoconfigure.SpringBootApplication; 
import org.springframework.context.annotation.Import; 

import ch.qos.logback.classic.Logger; 

@SpringBootApplication 
@Import(value = MvcConfig.class) 
public class FrontendApp { 

     private static Logger logger = (Logger) LoggerFactory.getLogger(FrontendApp.class); 

     public static void main(String[] args) { 

      SpringApplication app = new SpringApplication(FrontendApp.class); 
      app.run(args); 
    } 

} 

SecurityConfiguration.java

@Configuration 
@EnableWebSecurity 
@EnableGlobalMethodSecurity(prePostEnabled = true, securedEnabled = true) 
public class SecurityConfiguration extends WebSecurityConfigurerAdapter { 
    @Autowired 
    private CustomAuthenticationProvider customAuthenticationProvider; 

    @Autowired 
    @Override 
    protected void configure(AuthenticationManagerBuilder auth) throws Exception { 
     auth.authenticationProvider(this.customAuthenticationProvider); 
    } 

    @Override 
    protected void configure(HttpSecurity http) throws Exception { 
     http 
      .authorizeRequests() 
      .antMatchers("/css/**").permitAll() 
      .antMatchers("/resources/**").permitAll() 
      .antMatchers("**").permitAll() 
      .antMatchers("/login").permitAll() 
     .anyRequest().authenticated().and() 
     .formLogin() 
     .loginPage("/login"); 
    } 

} 

私はすべてのURLを開いたので、私は/ログインできるかどうかを確認できます。 CustomAuthenticationProvider.java

@Component 
public class CustomAuthenticationProvider implements AuthenticationProvider {  

    private static final Logger logger = LoggerFactory.getLogger(CustomAuthenticationProvider.class); 


    public CustomAuthenticationProvider() { 
     logger.info("*** CustomAuthenticationProvider created"); 
    } 

    @Override 
    public boolean supports(Class<?> authentication) { 
     return UsernamePasswordAuthenticationToken.class.isAssignableFrom(authentication); 
    } 

    @Override 
    public Authentication authenticate(Authentication authentication) throws AuthenticationException { 

     if(authentication.getName().equals("karan") && authentication.getCredentials().equals("saman")) { 
      List<GrantedAuthority> grantedAuths = new ArrayList<>(); 
      grantedAuths.add(new SimpleGrantedAuthority("ROLE_USER")); 
      grantedAuths.add(new SimpleGrantedAuthority("ROLE_ADMIN")); 
      return new UsernamePasswordAuthenticationToken(authentication.getName(), authentication.getCredentials(), grantedAuths); 
     } else { 
       return null; 
     } 
    } 

} 

私はlocalhostをしようとすると:私はlocalhostをしようとすると、しかし

Whitelabel Error Page 

This application has no explicit mapping for /error, so you are seeing this as a fallback. 
There was an unexpected error (type=Internal Server Error, status=500). 
Error resolving template "login", template might not exist or might not be accessible by any of the configured Template Resolvers 

:8080 /それが正常とのindex.htmlにリダイレクトされます8080 /ログインを私は次のエラーを取得します私はMvcConfig.javaで指定しました。ここで

は私のlogin.htmlをコードです:

<html xmlns="http://www.w3.org/1999/xhtml" 
     xmlns:th="http://www.thymeleaf.org" 
     xmlns:sec="http://www.thymeleaf.org/thymeleaf-extras-springsecurity3" 
     xmlns:layout="http://www.ultraq.net.nz/thymeleaf/layout"> 

<head> 
    <meta charset="utf-8" /> 
    <title>k</title> 
</head> 

私は//srcに/メイン/リソース/テンプレートおよび/ srcに/メイン/ webappの/と/ srcに/メイン/ webappの中で私のlogin.htmlと貼り付けテンプレートはまだ動作しませんでした!

+0

あなたは 'login'リクエストを傍受し、存在しない 'login'ページにリダイレクトしなければならないので、コントローラの設定はエラーです。これは、thymeleafビューリゾルバをバイパスしています。次の行を削除しようとしました: 'registry.addViewController("/login ")。setViewName(" login ");'あなたのMvcConfigから? –

+0

@ FinbarrO'Brienはい、試しました。実際、私はlogin1のようなものを追加して、対応するlogin1.htmlをテンプレートに入れてみましたが、同じエラーもありました。 – D3GAN

+0

アプリケーションをwarファイルまたはexecutable jarとしてビルドしていますか? –

答えて

0

OK、これはpom.xmlの単純な間違いでした。

<!--<resources>--> 
     <!--<resource>--> 
      <!--<directory>src/main/resources</directory>--> 
      <!--<includes>--> 
       <!--<include>*</include>--> 
      <!--</includes>--> 
      <!--<filtering>true</filtering>--> 
     <!--</resource>--> 
    <!--</resources>--> 

私がポンポンファイルから(あなたが見るように)これらをコメントアウトした後、それはperfectly.Atを働いた少なくとも上記のコードは、他の誰かの役に立つかもしれません。