我試著用Spring Boot創建了一個屬於自己的模板項目
我之前就创建了这个结构,但是没有写下来,所以正好趁这个机会写一下。以下是我的一些坚持。
建筑
我试着使用正在快速普及的Gradle。虽然看了很多资料发现,用Maven可能会遇到较少的问题。不过,由于已经配置好了Gradle Wrapper,我认为构建还是相当简便的。相比Maven来说,构建速度较慢,需要加上”–daemon”或者充分利用热部署。
配置文件
看起来也可以用YAML来做,但我决定使用application.properties来做。
Thymeleaf的配置
我设置了将缓存关闭和模板模式更改为LEGACYHTML5。另外,为此我添加了依赖nekohtml。
spring.thymeleaf.mode=LEGACYHTML5
spring.thymeleaf.cache=false
如果使用LEGACYHTML5,就不需要将模板转为xhtml。(因为HTML5转为xhtml会出错)
一开始我使用的是HTML5,但最终还是需要我修复设计师忘记转为xhtml的部分,还有IE的一些条件注释需要使用dialect才能生效,这让我感到相当棘手。(有一些xhtml不可用的情况)
参考链接:http://forum.thymeleaf.org/Conditional-Stylesheets-and-Thymeleaf-s-XML-Parser-HTML5-tp3468198p4025036.html
作为一个设计师,我也翻了翻这本书,但我觉得关于xhtml的解释并不多,因此最近我转而支持LEGACYHTML5派。
HTML和XHTML的关系类似于动态语言和静态语言。
跨站请求伪造防护
新增spring-boot-starter-security依赖。
准备一个带有@ EnableWebMvcSecurity注解的配置类,继承WebSecurityConfigurerAdapter。
由于不需要密码验证,将securityContext禁用。(由于只是根据感觉写的,需要进一步调查Spring Security。。)
package hello;
import org.springframework.context.annotation.Configuration;
import org.springframework.security.config.annotation.web.builders.HttpSecurity;
import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter;
import org.springframework.security.config.annotation.web.servlet.configuration.EnableWebMvcSecurity;
@Configuration
@EnableWebMvcSecurity
public class WebSecurityConfig extends WebSecurityConfigurerAdapter {
@Override
protected void configure(HttpSecurity http) throws Exception {
http.securityContext().disable();
}
}
只需一个选项的话,请参考以下翻译:
只需这样,form标签中会自动包含隐藏的CSRF令牌。
然而需要注意的一点是,仅在经过初步测试后,貌似只有被标注为th:action的post form标签会被自动插入。普通的action是不行的。
此外,据说模板中可以通过变量_csrf进行引用。
<p th:text="${_csrf.token}"></p>
打开屏幕并查看源代码,可以确认已设置CSRF令牌。
确认如果篡改CSRF令牌并发送请求,会导致403错误。检查似乎是由Spring Security在背后透明地进行的。
JavaScript和其他静态内容
听起来有一些不同的设置方法,但我决定在src/main/resources中创建一个static目录,并将文件放在那里。
国际化
将i18n用的消息文件放置在src/main/resources/i18n文件夹中。分别发布ja_JP和en版本的文件。
使用Spring Data JPA实现数据库访问
在中国, 我们可以这样表述:
在依存关系中添加spring-boot-starter-data-jpa和H2Database。
事务边界应该始于带有Service注解的类,并且应该包括检查异常,如果发生异常,则应该进行回滚。
通知Controller通过异常,如已存在数据的情况,这样做很方便,并且通过使用检查异常,在方法的签名中可以预先知道可能发生的异常情况,这非常方便。Controller可以捕获并进行适当的处理。
其他
制作起动时的横幅。
_人人人人人人人人人人人人人人_
> Spring Boot 起動します! <
 ̄Y^Y^Y^Y^Y^Y^Y^Y^Y^Y^Y^Y^Y^Y ̄
未来
计划进一步扩展并增加各种功能。
Spring Boot是一个非常适合快速创建WebApp的工具。
我们已经在Qiita API v2 Hackathon中使用过它,并且已经感受到了它的快速开发速度。
请参考链接:http://eiryu.hatenablog.com/entry/2014/12/21/163531
升级了Spring Boot版本从1.12到1.2.3的备忘录。
当将build.gradle版本升级并运行bootRun时,出现了以下错误。
org.springframework.beans.factory.BeanDefinitionStoreException: Failed to read candidate component class: URL [jar:file:/Users/eiryu/.gradle/caches/modules-2/files-2.1/org.springframework.boot/spring-boot-autoconfigure/1.2.3.RELEASE/11175f217ac34bdacd6282cd44310f211121e270/spring-boot-autoconfigure-1.2.3.RELEASE.jar!/org/springframework/boot/autoconfigure/jdbc/DataSourceAutoConfiguration$JdbcTemplateConfiguration.class]; nested exception is java.lang.IllegalStateException: Could not evaluate condition on org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration$JdbcTemplateConfiguration due to internal class not found. This can happen if you are @ComponentScanning a springframework package (e.g. if you put a @ComponentScan in the default package by mistake)
应用程序类不能放在默认包中,似乎是不允许的。如果将其移动到任意包的下面,问题将会得到解决。
请提供更多的上下文并明确您想要求解的问题,以便我可以更好地回答您的需求。谢谢。
-
- http://spring.io/guides/gs/rest-service/
-
- http://is4cafe.hatenablog.com/entry/20140403/1396535920
-
- http://blog.scheakur.com/post/91500044242/spring-boot-spring-loaded-gradle-intellij
-
- http://docs.spring.io/spring-boot/docs/current/reference/html/howto-hotswapping.html#howto-reload-springloaded-gradle-and-intellij
-
- http://dev.classmethod.jp/server-side/java/thymeleaf-spring-i18n-1/
-
- http://qiita.com/ksby/items/2ea40c5455c31870bd7c
-
- http://blog.nnasaki.com/entry/spring4/2
- http://docs.spring.io/spring-security/site/docs/current/reference/html/csrf.html