Spring身份验证页面更改

时间:2017-05-26 19:31:31

标签: spring spring-security spring-web

对于糟糕的头衔感到抱歉,我不知道如何用文字表达。

我的问题是我使用Spring Initializr创建了一个项目:

  • Spring Web
  • Spring Security
  • 弹簧执行器
  • Spring JPA

    <parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>1.5.3.RELEASE</version>
    <relativePath/> <!-- lookup parent from repository -->
    </parent>
    
    <properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
    <java.version>1.8</java.version>
    </properties>
    
    <dependencies>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-actuator</artifactId>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-data-jpa</artifactId>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-security</artifactId>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>
    
    <dependency>
        <groupId>mysql</groupId>
        <artifactId>mysql-connector-java</artifactId>
        <scope>runtime</scope>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-test</artifactId>
        <scope>test</scope>
    </dependency>
    </dependencies>
    
    <build>
    <plugins>
        <plugin>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-maven-plugin</artifactId>
        </plugin>
    </plugins>
    </build>
    

当我映射URL并尝试访问它时,我得到了这个不错的登录表单:

login form

但是当我用

覆盖安全性时
@Configuration
@EnableWebSecurity
public class WebSecurityConfig extends WebSecurityConfigurerAdapter {

@Autowired
public void configureGlobal(AuthenticationManagerBuilder auth) throws Exception {
    auth
            .inMemoryAuthentication()
            .withUser("admin").password("admin").roles("ADMIN");
    }
}

我得到了这个丑陋的登录表单

ugly login form

我猜是因为在覆盖配置时,有些东西正在改变Spring使用的登录表单,或者我使用的是Spring安全错误。

有人能告诉我为什么会这样吗?谢谢!

1 个答案:

答案 0 :(得分:0)

第一个不错的登录表单属于您的浏览器。如果您尝试使用其他浏览器,则会看到不同的结果。当您的浏览器请求应用程序的URL时,您的应用程序会使用未经授权的代码进行响应,然后,您的浏览器会要求您提供凭据以重试请求。

丑陋的登录表单是Spring的默认设置。您可以根据需要对其进行样式化。您可以看到thisthis示例来帮助您入门。您需要添加一些CSS。

在扩展类configure(HttpSecurity http)时,您没有覆盖的方法WebSecurityConfigurerAdapter的默认实现如下所示:

protected void configure(HttpSecurity http) throws Exception {
    logger.debug("Using default configure(HttpSecurity). If subclassed this will potentially override subclass configure(HttpSecurity).");

    http
        .authorizeRequests()
            .anyRequest().authenticated()
            .and()
        .formLogin().and()
        .httpBasic();
}

.formLogin()是您获取丑陋登录表单的地方。