1. 程式人生 > >SpringBoot入門筆記(二)IDEA下springboot專案spring+mybatis+sqlserver+log4j+簡單登入驗證攔截器的框架搭建

SpringBoot入門筆記(二)IDEA下springboot專案spring+mybatis+sqlserver+log4j+簡單登入驗證攔截器的框架搭建

IDEA下springboot專案spring+mybatis+sqlserver+log4j+簡單登入驗證攔截器的框架搭建

先貼一個專案的目錄結構

Attention:templates.html5是templates目錄下新建了一個html5目錄

1.專案建立

這個簡單,選擇jdk目錄,填寫專案資訊,選擇springboot版本,勾選一些需要的包依賴,基本上就是一直next,然後finish就好了,略過。。。

2.pom.xml

專案建立時,會將你選擇的springboot包依賴加進去,我們需要的是加入一些建立時沒有的依賴

2.1 資料庫連線池--druid

關於druid資料庫連線池的優點和效能就先不說,百度一下,你就知道

        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>druid</artifactId>
            <version>1.1.3</version>
        </dependency>

2.2 資料返回格式--JSONObject

        <dependency>
	    <groupId>com.alibaba</groupId>
	    <artifactId>fastjson</artifactId>
	    <version>1.1.36</version>
	</dependency>

2.3日誌輸出--log4j

        <!-- Log start -->
        <!-- spring boot start -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter</artifactId>
            <exclusions>
                <!-- 排除自帶的logback依賴 -->
                <exclusion>
                    <groupId>org.springframework.boot</groupId>
                    <artifactId>spring-boot-starter-logging</artifactId>
                </exclusion>
            </exclusions>
        </dependency>

        <!-- springboot-log4j -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-log4j</artifactId>
            <version>1.3.8.RELEASE</version>
        </dependency>
        <!-- Log end -->

引入log4j之前首先要排除springboot自帶的logback依賴,在建立Spring Boot工程時,我們引入了spring-boot-starter,其中包含了spring-boot-starter-logging,該依賴內容就是Spring Boot預設的日誌框架Logback。

附上一份log4j.properties的檔案

#logger level
log4j.rootCategory=DEBUG,stdout,DebugAppender,InfoAppender,ErrorAppender
log4j.debug=true
log4j.appender.stdout=org.apache.log4j.ConsoleAppender  
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout     
log4j.appender.stdout.layout.ConversionPattern=[QC] %p [%t] %C.%M(%L) | %m%n
#logger input file
log4j.logger.DebugAppender.access=DEBUG
log4j.appender.DebugAppender=org.apache.log4j.DailyRollingFileAppender     
log4j.appender.DebugAppender.File=../logs/a.log
log4j.appender.DebugAppender.layout=org.apache.log4j.PatternLayout     
log4j.appender.DebugAppender.layout.ConversionPattern=%d-[TS] %p %t %c - %m%n     

#logger input file
log4j.logger.InfoAppender.access=INFO
log4j.appender.InfoAppender=org.apache.log4j.DailyRollingFileAppender     
log4j.appender.InfoAppender.File=../logs/b.log
log4j.appender.InfoAppender.layout=org.apache.log4j.PatternLayout     
log4j.appender.InfoAppender.layout.ConversionPattern=%d-[TS] %p %t %c - %m%n     

#error log input file
log4j.logger.ErrorAppender.access=ERROR
log4j.appender.ErrorAppender=org.apache.log4j.DailyRollingFileAppender
log4j.appender.ErrorAppender.File=../logs/c.log
log4j.appender.ErrorAppender.Append = true
log4j.appender.ErrorAppender.threshold = ERROR
log4j.appender.ErrorAppender.layout=org.apache.log4j.PatternLayout 
log4j.appender.ErrorAppender.layout.ConversionPattern=%d{MM-dd HH:mm:ss.SSS} %c %-5p - %m%n

pom.xml到這裡就基本結束了,貼上一張log4j的日誌列印圖。

3.簡單的登入驗證攔截器

自定義一個登入驗證攔截器LoginInterceptor,實現HandlerInterceptor介面

3.1 LoginInterceptor.java

private static final Logger logger = LoggerFactory.getLogger(LoginInterceptor.class);

    //在目標方法執行前執行
    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
        System.err.println("------preHandle------");

        System.out.println("ContextPath" + request.getContextPath());
        System.out.println("getRequestURI" + request.getRequestURI());

        //獲取session
        HttpSession session = request.getSession(true);
        //判斷使用者是否存在,不存在就跳轉到登入頁面
        if (session.getAttribute("username")==null){
            String uri = request.getRequestURI();
            System.out.println(uri);
            String url = request.getServerName()+":"+request.getServerPort()+request.getContextPath()+"/index";
            System.out.println(url);
            response.sendRedirect(request.getContextPath()+"/index");
            return false;
        }

        return true;
    }

    //在目標方法執行後執行,但在請求返回前,我們仍然可以對 ModelAndView進行修改
    @Override
    public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {

    }

    // 在請求已經返回之後執行
    @Override
    public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {

    }

3.2 登入配置類--LoginConfig.java

繼承WebMvcConfigurerAdapter類,此類一定要記得加上@Configuration註解,否則無法生效

public LoginConfig() {
        super();
    }

    @Override
    public void configureDefaultServletHandling(DefaultServletHandlerConfigurer configurer) {
        configurer.enable();
    }

    @Override
    public void addInterceptors(InterceptorRegistry registry) {
        //攔截規則:除了excludePathPatterns中地址,其他都攔截判斷
        registry.addInterceptor(new LoginInterceptor()).addPathPatterns("/**").excludePathPatterns("/index");
        super.addInterceptors(registry);
    }

    @Override
    public void addResourceHandlers(ResourceHandlerRegistry registry) {
        registry.addResourceHandler("/static/**").addResourceLocations("classpath:/static/");
        registry.addResourceHandler("/templates/**").addResourceLocations("classpath:/templates/");
        super.addResourceHandlers(registry);
    }

4.結語

大概就是這樣,中間漏了一部分內容,等有空閒時補上。新手上路,多多指教。