那些在《JavaEE开发的颠覆者 Spring Boot实战》中遇到的坑,,。(一)


一、一开始下了一本PDF书,影印版,看一般的字还是看的清,但是看到代码部分的话,还是会有模糊,尤其是一些配置的时候,后来是在不行就去网上搜了一下,找到一个网易云阅读上有网页版的《JavaEE开发的颠覆者 Spring Boot实战》,刚想感谢网易爸爸,才发现他不能选中,但还是将就着用了一会儿,毕竟比影印版清晰多了。然而,一个偶然的机会,发现这个网易右键没反应,有问题,按个"F12"试试,于是就找到了在HTML代码里的代码块,PS:有空我想试试爬虫。


二、在书的 4.2.2 里有一个样例,写一个最简单的 spring-mvc 的例子,然后,我就为此付出了2天的时间。注释虽是大势所趋,但好像没有 ".xml"入手来的简单。

① 在项目创建后 需要在 "File -> Setting -> Modules ->Dependencies" 中,加入 Tomcat 依赖

②在 "File -> Setting -> Artifacts"  添加 Web Applaction: Exploded 。

③在 "Run" 的时候,也要先配置 Tomcat 服务器。

以上三条具体可见 IntelliJ IDEA 15 部署Tomcat及创建一个简单的Web工程 

④用 IDEA 配置的 Tomcat 访问时 ,不要加 项目名!!!!!!!!!!!!!!!

    直接 "http://localhost:8080/index" 干干净净的。

最后  "Welcome to Spring MVC world"。

那些在《JavaEE开发的颠覆者 Spring Boot实战》中遇到的坑,,。(一)_第1张图片


三、在书的4.5章,需要引用 jquery.js, 一直失败,最后发现 书中js代码引用js这边用的是

搜了一下,

 一开始没注意到这点,于是,尝试了别的方法,

1、直接引用 jquery.js 

2、maven引入 jquery.js的依赖, 详见  深入 Spring 系列之静态资源处理


四、在书的6.5.1章里,@ConfigurationProperties注释的 locations 属性来指定properties文件的位置,源码:

@ConfigurationProperties(prefix = "author",locations = {"classpath:config/author.properties"})

但是这个在 spring boot 1.5以上版本被取消了,解决方法:spring boot1.5以上版本@ConfigurationProperties取消location注解后的替代方案

( 这里因为没有保存,可能有遗漏 )


五、在书的6.5.5章里,在pom.xml中添加spring-boot-starter-hello的依赖,找不到这个依赖,

解决方法,spring-boot-starter-hello项目没有 install   (之前是我用了两个maven,好像也不对)

六、在书的7.1章里我要在一个已经生成的spring-boot项目中添加 dependencties ,不知道怎么描述这个问题。

新建了项目后,发现也就 pom.xml 里多了对 Thymeleaf 的依赖支持,直接加就好

七、在书的7章里,大量用到 data-* ,滥用,删了,all is well。

八、可能觉得这个有点用,

那些在《JavaEE开发的颠覆者 Spring Boot实战》中遇到的坑,,。(一)_第2张图片

九、在书的7.4.2章里,ConfigurableEmbeddedServletContainer接口,已经弃用,用TomcatServletWebServerFactory替代

为了实现这个,也算是融汇贯通吧:

1、添加404.html

那些在《JavaEE开发的颠覆者 Spring Boot实战》中遇到的坑,,。(一)_第3张图片

2、在 DemoApplication 中添加 TomcatServletWebServerFactory

@Bean
    public ServletWebServerFactory servletContainer() {
        TomcatServletWebServerFactory tomcat = new TomcatServletWebServerFactory();
        tomcat.setPort(8888);
        tomcat.addErrorPages(new ErrorPage(HttpStatus.NOT_FOUND,"/404"));
        return tomcat;
    }

3、新建controller

package com.learn.demo;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;

@Controller
public class DemoController {
    @RequestMapping(value =  "/404")//9
    public  String hello(){
        return "404"; //3
    }

}

OK,404 FIND


十、在书的7.6.3章中,对Spring Security的使用,照搬书中的方法写,没有报错,但登陆的时候,会发现它在输入错误的账号密码无后,可以跳出正常的错误提示,但输入预设的后无法跳转到"chat.html"页面,而是返回"login.html"页面。

仔细查看代码后发现


就这里有点看着像有问题,直接输入网址,发现

那些在《JavaEE开发的颠覆者 Spring Boot实战》中遇到的坑,,。(一)_第4张图片

我就觉得可能是版本更新后弃用,于是搜版本,Spring Security已经更新到 5.0,于是将其代码改为

虽然在IDE中还是不识别,但是还是尝试着开了一下,然后突然在 console 中发现有错误信息 

java.lang.IllegalArgumentException: There is no PasswordEncoder mapped for the id "null"

试着搜了一下这个错误,发现,还是个版本问题,spring security 5.0中新增了多种加密方式,也改变了密码的格式。

照着其中一个帖子改了一下 configure(AuthenticationManagerBuilder auth){}方法,将

@Override
    protected void configure(AuthenticationManagerBuilder auth) throws Exception {
        
        auth
                .inMemoryAuthentication()
                .withUser("wyf").password("123456").roles("USER")
                .and()
                .withUser("wisely").password("123456").roles("USER");
    }

改为:

@Override
    protected void configure(AuthenticationManagerBuilder auth) throws Exception {
        auth
                .inMemoryAuthentication()
                .withUser("wyf").password(new BCryptPasswordEncoder().encode("123456")).roles("USER")
                .and()
                .withUser("wisely").password(new BCryptPasswordEncoder().encode("123456")).roles("USER");
    }

还是报错,后来参考了另一个帖子,再改为:

@Override
    protected void configure(AuthenticationManagerBuilder auth) throws Exception {
        auth
                .inMemoryAuthentication()
                .withUser("wyf").password("{noop}123456").roles("USER")
                .and()
                .withUser("wisely").password("{noop}123456").roles("USER");
    }

加了"{noop}"注释,终于可以正常运行。

那些在《JavaEE开发的颠覆者 Spring Boot实战》中遇到的坑,,。(一)_第5张图片

(PS1:第二种方式应该是最为合理的做法,但是不知道哪里出错了,有空细究)

(PS2: 通过修改configure(HttpSecurity http) 来让 spring security 只拦截/chat ,方便访问别的网址 )



你可能感兴趣的:(学习笔记)