spring boot(一)基本配置與SSL

Spring bootjava

    簡述web

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

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

    父級依賴  編程

        <parent>        json

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

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

                    <version>1.5.1.RELEASE</version>    mvc

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

            </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

相關文章
相關標籤/搜索