spring boot(一)基本配置與SSL

Spring boot

    簡述

        spring boot使用“習慣優於配置”的理念,可以讓項目快速的運行;

        使用spring boot很容易創建一個獨立運行(內嵌servlet容器)基於spring框架的項目,開發者可以不用或者只使用很少的spring配置。

    父級依賴  

        <parent>        

                    <groupId>org.springframework.boot</groupId>        

                    <artifactId>spring-boot-starter-parent</artifactId>        

                    <version>1.5.1.RELEASE</version>    

                    <relativePath/> <!-- lookup parent from repository -->

            </parent>

           有了spring-boot-starter-parent,就是一個spring boot項目,而且定義了一些jar包的version,可以省去version標籤

    起步依賴Spring-boot-starter-xx

            如我們之前要實現web功能,引入了spring-boot-starter-web這個起步依賴,定義了對其他庫的傳遞依賴,這些東西加在一起即支持某項功能,它自動組裝了spring-web,spring-webmvc等jar包

    基本配置

        入口類:spring boot通常有一個名爲*Application的入口類,入口類中有一個main方法。

        @SpringBootApplication是spring boot的核心註解,它是一個組合註解:

            @Configuration     ——    聲明當前類位配置類(xml)

            @EnableAutoConfiguration    —— 讓 Spring Boot 根據類路徑中的 jar 包依賴爲當前項目進行自動配置,

                    例如添加了 spring-boot-starter-web 依賴,會自動添加 Tomcat 和 Spring MVC 的依賴,那麼 Spring Boot 會對 Tomcat 和 Spring MVC 進行自動配置。

            @ComponentScan    —— 自動掃描包,掃描該層下所有聲明bean的註解類,並且向spring容器中註冊爲bean;一般爲@ComponentSatn("包路徑")。

            

    外部配置

        spring boot允許使用properties文件,命令行等作爲外部配置。

        命令行:如spring boot是可以基於jar包運行的,

        java -jar xx.jar --server.port=9090

    常規屬性配置:

        application.properties文件中:

        book.authour=sun

        book.name=spring boot

    入口類:

            @RestController    //等價於@Controller+@ResponseBody的結合,使用這個註解的類裏面的方法都以json格式輸出,並且是將函數的返回值直 接填入HTTP響應體中

         @SpringBootApplication

            public class DemoApplication {

            

                            @Value("${book.name}")

                        private String bookname;

            

                        @RequestMapping("/")

                        String index(){

                            return "Hello Spring boot,bookname:"+bookname;

                        }

                        

                        public static void main(String[] args) {

                        

                            SpringApplication.run(DemoApplication.class, args);

                        }

            

           }

            image.png

    類型安全的配置:

        爲了簡化每個屬性都由@value對應,通過@ConfigurationProperties將properties屬性和一個bean及其屬性關聯

            @Component

            @ConfigurationProperties(prefix = "book")    //使用的配置參數的前綴

            @PropertySource("classpath:book.properties")    //配置文件的位置

            public class Book {

            

                private String name;

            

                public String getName() {

                    return name;

                }

            

                public void setName(String name) {

                    this.name = name;

                }

            }

            @RestController

            @SpringBootApplication

            public class DemoApplication {

            

                @Autowired

                private Book book;

            

                @RequestMapping("/")

                String index(){

                    return "Hello Spring boot,bookname:"+book.getName();

                }

            

                public static void main(String[] args) {

            

                    SpringApplication.run(DemoApplication.class, args);

                }

            }

                        image.png

    profile配置

        profile是spring boot用來針對不同的環境對不同的配置提供支持的,全局profile配置使用application-{profile}.properties,通過在application.properties中設置spring.profile.active=xx來制定活動的profile。


    spring boot註冊Servlet,Filter,Listener


    傳統的java ee是在web.xml中配置filter等信息,而spring boot支持兩種方式:代碼註冊;註解註冊。

        

                1.代碼註冊

                                            創建自定義的filter

                                            public class TestFilter implements Filter {

                                              @Override

                                              public void init(FilterConfig filterConfig) throws ServletException {

                                              }

                                             @Override

                                              public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain)

                                                  throws IOException, ServletException {

                                                System.out.println("TestFilter");

                                              }

                                               @Override

                                              public void destroy() {

                                              }

                                            }

                                            配置類中註冊過濾器:

                                            @Configuration        //@Configuration:標註當前類是配置類,並會將當前類內聲明的一個或多個bean加入到spring容器中

                 public class WebConfig {

                                            @Bean        //相當於XML中的<bean></bean>,放在方法的上面,而不是類,意思是產生一個bean,並交給spring管理。

                                                 public FilterRegistrationBean getDemoFilter(){

                                                 TestFilter demoFilter = new TestFilter();

                                                     FilterRegistrationBean registrationBean=new FilterRegistrationBean();

                                                    registrationBean.setFilter(demoFilter);

                                                     List<String> urlPatterns=new ArrayList<String>();

                                                     urlPatterns.add("/*");                            //攔截路徑,可以添加多個

                                                     registrationBean.setUrlPatterns(urlPatterns);

                                                     registrationBean.setOrder(1);

                                                     return registrationBean;

                                                 }

                                            }


                2.註解註冊

                                            創建自定義的filter,加@WebFilter註解

                                            @Order(1)

                                            @WebFilter(filterName = "testFilter2”, urlPatterns = "/*")

                                            public class TestFilter2 implements Filter {

                                              @Override

                                              public void init(FilterConfig filterConfig) throws ServletException {

                                             

                                              }

                                              @Override

                                              public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain)

                                                  throws IOException, ServletException {

                                                filterChain.doFilter(servletRequest,servletResponse);

                                              }

                                              @Override

                                            

                                              public void destroy() {

                                              }

                                            }

                在工程入口加上註解@ServletComponentScan,實現自動的掃描註冊(帶有WebFilter,WebServlet,WebListener註解的類),不用在代碼中寫registrationBean.setFilter

                                       @SpringBootApplication

                                        @ServletComponentScan

                                        public class SpringBootSimpleApplication {

                                                      public static void main(String[] args) {

                                                        SpringApplication.run(SpringBootSimpleApplication.class, args);

                                                      }

                }


Spring boot SSL配置

    SSL(security sockets layer安全套接層)位於TCP/IP協議和各種應用層協議(如HTTP)之間,爲數據通信提供安全支持。採用了SSL之後,HTTP就有了HTTPS的加密,證書和完整性保護這些功能。

            1.使用SSL首先需要生成證書,可以通過jdk裏的證書管理工具keytool生成自簽名的證書;

            2.配置SSL:spring boot允許在application.properties中配置http或https,但是隻能配置一個,另外一個需要以編程的方式配置。https比較複雜,所以在配置文件中配置https信息:

             #https端口號.  

       server.port: 443  

        #證書路徑.  

        server.ssl.key-store: classpath:keystore.p12  

        #證書密碼

        server.ssl.key-store-password: 123456  

        #祕鑰庫類型  

        server.ssl.keyStoreType: JKS  

        #證書別名  

        server.ssl.keyAlias: tomcat 

    3.此時,可以在頁面訪問https的網頁,但是訪問不到http的網頁,還需要實現http到https的重定向

    4.代碼中配置http信息,並添加tomcat的connector,實現自動跳轉

                     @Bean  

                public EmbeddedServletContainerFactory servletContainer() {  

                  TomcatEmbeddedServletContainerFactory tomcat = new TomcatEmbeddedServletContainerFactory() {  

               

                       @Override  

                       protected void postProcessContext(Context context) {  

                                  SecurityConstraint securityConstraint = new SecurityConstraint();  

                                  securityConstraint.setUserConstraint("CONFIDENTIAL");  

                                  SecurityCollection collection = new SecurityCollection();  

                                  collection.addPattern("/*");  

                                  securityConstraint.addCollection(collection);  

                                  context.addConstraint(securityConstraint);  

                       }  

                   };  

                   //添加連接配置,http的配置信息.  

                   tomcat.addAdditionalTomcatConnectors(initiateHttpConnector());  

                   return tomcat;  

                }  


                /**  

                 * 配置http連接信息. 

                 */  

                private Connector initiateHttpConnector() {  

                   Connector connector = new Connector("org.apache.coyote.http11.Http11NioProtocol");  

                   connector.setScheme("http");  

                   connector.setPort(8080);  

                   connector.setSecure(false);  

                   connector.setRedirectPort(443);  

                   return connector;  

                }  

            5.此時訪問

        http://localhost:8080自動轉到https://localhost:443


關於@Configuration註解、@Bean註解以及配置自動掃描

轉自https://blog.csdn.net/javaloveiphone/article/details/52182899

    image.png

      image.png

        image.png

          image.png

            image.png

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章