久久精品精选,精品九九视频,www久久只有这里有精品,亚洲熟女乱色综合一区
    分享

    springboot系列(一):初次使用與登錄驗證實現(xiàn)

     quasiceo 2018-08-19

    寫在前面:不逼自己一把,都不知道自己還有裝逼的潛能!

    聽說過很多springboot如何流行,以及如何簡化了我們的應用開發(fā),卻沒有真正使用過springboot,現(xiàn)在終于要動手了!打算自己動手的這個項目,結果不會是促成某個真正的項目,學習為主,把學習過程分享出來。開篇探索以以下兩個方面為主:

    1、從mvc經典框架到springboot

    2、最原始的方式實現(xiàn)登錄驗證

    一、建一個使用springboot的項目

    springboot是建立在的spring生態(tài)的基礎上的,以前看spring的時候,有兩大概念是糾結了很久的,IOC(控制反轉)以及AOP(面向切面的編程)。其實控制反轉就是依賴注入,spring提供了一個IOC容器來初始化對象,解決對象間依賴管理和對象的使用,如@Bean、@Autowired等可以實現(xiàn)依賴注入,AOP目前理解是在一些日志框架場景中用到。

    平時我們常見的web項目開發(fā),使用的mvc框架、maven管理在springboot依然使用到,springboot最明顯的好處是簡化了新建一個項目時的各種配置過程,就連tomcat都不用配置了。可以看到我新建一個maven項目大目錄結構是這樣的



    跟著上圖目錄結構,我們來看看springboot是如何完成一個普通的web項目所需要做的事的

    a.web容器:springboot內嵌了Tomcat,我們不需要手動配置tomcat以及以war包形式部署項目,啟動入口為目錄中App.java中的main函數(shù),直接運行即可。

    @SpringBootApplication
    public class App {
    public static void main(String[] args) {
    SpringApplication.run(App.class,args);
    }
    }

    b.依賴管理:spring提供了一系列的starter pom來簡化Maven的依賴加載,如一個web項目pom.xm部分配置如下:

        <parent>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-parent</artifactId>
            <version>1.4.3.RELEASE</version>
        </parent>
    
        <dependencies>
            <!--Spring Boot的核心啟動器,包含了自動配置、日志和YAML-->
            <dependency>
                   <groupId>org.springframework.boot</groupId>
                   <artifactId>spring-boot-starter</artifactId>
            </dependency>
    
            <!--支持全棧式Web開發(fā),包括Tomcat和spring-webmvc-->
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-web</artifactId>
            </dependency>
    
        </dependencies>
    
    </project>

    c.配置管理:目錄中src/main/resource/application.properties為配置文件,springboot可以自動讀取,或者使用java配置可以看到沒有web.xm,沒有spring相關的配置文件,整個項目看起來非常的簡潔。

    #數(shù)據(jù)庫配置
    spring.datasource.url=jdbc:mysql://localhost:3306/world?characterEncoding=UTF-8&useUnicode=true
    spring.datasource.username=darren
    spring.datasource.password=darren123
    spring.datasource.driver-class-name=com.mysql.jdbc.Driver
    spring.jpa.properties.hibernate.hbm2ddl.auto=update
    一個springboot web項目大概就包含這些


    二、原始方式實現(xiàn)登錄驗證

    流程為:登錄頁面發(fā)起請求-->攔截器攔截匹配的url判斷session-->后臺驗證/設置session-->返回

    a、這里主要通過自定義攔截器的方式,繼承WebMvcConfigurerAdapter和HandlerInterceptorAdapter來實現(xiàn)攔截器對登錄請求進行攔截和session的判斷,我這里都寫在WebSecurityConfig.java中

    其中WebMvcConfigurerAdapter是Spring提供的基礎類,可以通過重寫 addInterceptors 方法添加注冊攔截器來組成一個攔截鏈,以及用于添加攔截規(guī)則和排除不用的攔截,如下:

    public void  addInterceptors(InterceptorRegistry registry){
        InterceptorRegistration addInterceptor = registry.addInterceptor(getSecurityInterceptor());
    
        addInterceptor.excludePathPatterns("/error");
        addInterceptor.excludePathPatterns("/login**");
    
        addInterceptor.addPathPatterns("/**");
    }

    其中HandlerInterceptorAdapter是spring mvc提供的適配器,繼承此類,可以非常方便的實現(xiàn)自己的攔截器,它有三個方法:preHandle、postHandle、afterCompletion。preHandle在業(yè)務處理器處理請求之前被調用。預處理,可以進行編碼、安全控制等處理;postHandle在業(yè)務處理器處理請求執(zhí)行完成后,生成視圖之前執(zhí)行。afterCompletion在DispatcherServlet完全處理完請求后被調用,可用于清理資源等。我項目中只重寫了preHandle,對請求進行session判斷和跳轉到自定義的頁面,如下:

     private class SecurityInterceptor extends HandlerInterceptorAdapter{
            @Override
            public boolean preHandle(HttpServletRequest request, HttpServletResponse response,Object handler) throws IOException {
                HttpSession session = request.getSession();
                
    //            判斷是否已有該用戶登錄的session
                if(session.getAttribute(SESSION_KEY) != null){
                    return true;
                }
    
    //            跳轉到登錄頁
                String url = "/login";
                response.sendRedirect(url);
                return false;
            }
        }
    b.controller中對登錄請求進行驗證以及頁面的跳轉,如下
    @Controller
    public class LoginController {
    
        @Autowired
        private LoginService loginService;
    
        @GetMapping("/")
        public String index(@SessionAttribute(WebSecurityConfig.SESSION_KEY)String account,Model model){
            
            return "index";
        }
    
        @GetMapping("/login")
        public String login(){
            return "login";
        }
    
        @PostMapping("/loginVerify")
        public String loginVerify(String username,String password,HttpSession session){
            User user = new User();
            user.setUsername(username);
            user.setPassword(password);
    
            boolean verify = loginService.verifyLogin(user);
            if (verify) {
                session.setAttribute(WebSecurityConfig.SESSION_KEY, username);
                return "index";
            } else {
                return "redirect:/login";
            }
        }
    
        @GetMapping("/logout")
        public String logout(HttpSession session){
            session.removeAttribute(WebSecurityConfig.SESSION_KEY);
            return "redirect:/login";
        }
    controller代碼解釋:loginVerify是對登錄請求到數(shù)據(jù)庫中進行驗證用戶名和密碼,驗證通過以后設置session,否則跳轉到登錄頁面。@GetMapping是一個組合注解,是@RequestMapping(method = RequestMethod.GET)的縮寫,@PostMapping同理。

    ps:實際項目登錄驗證會使用登錄驗證框架:spring security 、shiro等,以及登錄過程密碼加密傳輸保存等,這里僅僅用于了解。


    附完整源代碼:http://pan.baidu.com/s/1o7Rk72q


      本站是提供個人知識管理的網絡存儲空間,所有內容均由用戶發(fā)布,不代表本站觀點。請注意甄別內容中的聯(lián)系方式、誘導購買等信息,謹防詐騙。如發(fā)現(xiàn)有害或侵權內容,請點擊一鍵舉報。
      轉藏 分享 獻花(0

      0條評論

      發(fā)表

      請遵守用戶 評論公約

      類似文章 更多

      主站蜘蛛池模板: 国产欧美日韩A片免费软件| 国产男女性潮高清免费网站| 伊人热热久久原色播放WWW| 亚洲国产成人精品无码区蜜柚| 免费无码AV一区二区波多野结衣| 亚洲色精品VR一区二区三区| 亚洲AV无码专区国产乱码电影| 无码日韩做暖暖大全免费不卡| 奇米影视7777狠狠狠狠色| 中文字幕国产在线精品| 欧美日韩精品一区二区三区不卡| 丰满爆乳一区二区三区| 伊人狠狠色丁香婷婷综合| 亚洲gay片在线gv网站| 五月丁香六月综合缴清无码| 国产一区二区三区在线观看免费| 性动态图AV无码专区| 久久精品不卡一区二区| 亚洲另类精品无码专区| 国内少妇偷人精品免费| 国产日产久久高清欧美一区| 亚欧美日韩香蕉在线播放视频| 久久久无码精品亚洲日韩按摩| 国产精品福利在线观看无码卡一 | 亚洲精品无码久久一线| 无码国产精品一区二区高潮| 99RE8这里有精品热视频| 亚洲国产精品综合久久2007| 国产真实伦在线观看视频| 国产中文三级全黄| 吃奶呻吟打开双腿做受动态图 | 两个人的WWW免费高清视频| 亚洲国产精品久久久天堂麻豆宅男 | 呦交小U女精品视频| 精品国产中文字幕懂色| 97人人添人澡人人爽超碰| 欧美亚洲高清国产| 日韩人妻精品中文字幕| 国产麻豆成人传媒免费观看| 亚洲AV天天做在线观看| 成年视频人免费网站动漫在线|