![maven](https://i-blog.csdnimg.cn/blog_migrate/e92cfb01a791c7998db98d016f6707dc.png)
maven
使用Spring Boot,可以非常轻松地开始使用Spring。 但是仍然有人对不使用Spring Boot并以更经典的方式引导应用程序感兴趣。 几年前,我创建了一个原型(早于Spring Boot),简化了引导Spring Web应用程序的过程。 尽管Spring Boot已经上市了一段时间,但是Spring MVC 4 Quickstart Maven Archetype在GitHub上仍然很受欢迎。 我希望最近有了一些补充,希望它会更好。
Java 8
我已经决定将目标平台切换为Java8。在生成的项目中还没有特定的Java 8代码,但是我相信所有新的Spring项目都应该从Java 8开始。Java 8的采用超出了预期。 看看: https : //typesafe.com/company/news/survey-of-more-than-3000-developers-reveals-java-8-adoption-ahead-of-previous-forecasts
介绍Spring IO平台
Spring IO平台将核心Spring API整合到了一个针对现代应用程序的凝聚平台中。 。 主要优点是通过提供Spring项目的版本以及经过测试并已知可以一起工作的依赖项,简化了依赖项管理。
以前,所有依赖项都是手动指定的,解决版本冲突需要一些时间。 使用Spring IO平台,我们必须仅更改平台版本(当然还要注意平台外部的依赖性):
<dependencyManagement>
<dependencies>
<dependency>
<groupId>io.spring.platform</groupId>
<artifactId>platform-bom</artifactId>
<version>${io.spring.platform-version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
现在可以使用依赖项,而无需在POM中指定version
:
<!-- Spring -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
</dependency>
<!-- Security -->
<dependency>
<groupId>org.springframework.security</groupId>
<artifactId>spring-security-config</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.security</groupId>
<artifactId>spring-security-web</artifactId>
</dependency>
Java安全性配置
当我第一次创建原型时,无法使用Java代码配置Spring Security。 但是现在是了,所以我将XML配置迁移到Java配置。
SecurityConfig
现在从WebSecurityConfigurerAdapter
扩展,并用@Configuration
和@EnableWebMvcSecurity
批注标记。
安全配置详细信息
限制访问除以下以外的每个URL
XML配置:
<security:intercept-url pattern="/" access="permitAll" />
<security:intercept-url pattern="/resources/**" access="permitAll" />
<security:intercept-url pattern="/signup" access="permitAll" />
<security:intercept-url pattern="/**" access="isAuthenticated()" />
成为:
http
.authorizeRequests()
.antMatchers("/", "/resources/**", "/signup").permitAll()
.anyRequest().authenticated()
登录/注销
XML配置:
<security:form-login login-page="/signin" authentication-failure-url="/signin?error=1"/>
<security:logout logout-url="/logout" />
成为:
http
.formLogin()
.loginPage("/signin")
.permitAll()
.failureUrl("/signin?error=1")
.loginProcessingUrl("/authenticate")
.and()
.logout()
.logoutUrl("/logout")
.permitAll()
.logoutSuccessUrl("/signin?logout");
记得我
XML配置:
<security:remember-me services-ref="rememberMeServices" key="remember-me-key"/>
成为:
http
.rememberMe()
.rememberMeServices(rememberMeServices())
.key("remember-me-key");
CSRF已启用用于生产而已禁用以进行测试
当前默认情况下启用CSRF,因此不需要其他配置。 但是在进行集成测试时,我想确保CSRF被禁用。 我找不到执行此操作的好方法。 我从传递给CsrfConfigurer
CSRF保护匹配器开始,但是最终得到了很多我不希望在SecurityConfiguration
拥有的代码。 我最终得到了一个NoCsrfSecurityConfig
,它从原始SecurityConfig
扩展而来,并禁用了CSRF:
@Configuration
public class NoCsrfSecurityConfig extends SecurityConfig {
@Override
protected void configure(HttpSecurity http) throws Exception {
super.configure(http);
http.csrf().disable();
}
}
连接池
HikariCP现在用作生成的应用程序中的默认连接池。 使用默认配置:
@Bean
public DataSource configureDataSource() {
HikariConfig config = new HikariConfig();
config.setDriverClassName(driver);
config.setJdbcUrl(url);
config.setUsername(username);
config.setPassword(password);
config.addDataSourceProperty("cachePrepStmts", "true");
config.addDataSourceProperty("prepStmtCacheSize", "250");
config.addDataSourceProperty("prepStmtCacheSqlLimit", "2048");
config.addDataSourceProperty("useServerPrepStmts", "true");
return new HikariDataSource(config);
}
还有更多
Spring MVC 4快速入门Maven原型还远远没有完成。 由于Spring平台涉及原型,因此必须进行相应调整。 我期待听到可以改进的内容,使其成为一个更好的项目。 如果有想法或建议,请在GitHub上发表评论或创建问题。
参考文献
翻译自: https://www.javacodegeeks.com/2014/12/spring-mvc-4-quickstart-maven-archetype-improved.html
maven