設置登錄系統的賬號、密碼


開始吧

1、 給 index.jsp 設置表單

div外圍添加form表單標簽,input標簽改name屬性名,button按鈕改type類型為submit。

        <p>${SPRING_SECURITY_LAST_EXCEPTION.message}</p>
        <form action="${pageContext.request.contextPath }/do/login.html" method="post">
        <input type="hidden" name="${_csrf.parameterName}" value="${_csrf.token}"/>
        <div class="layadmin-user-login-box layadmin-user-login-body layui-form">
            <div class="layui-form-item">
                <label class="layadmin-user-login-icon layui-icon layui-icon-username" for="LAY-user-login-username"></label>
                <!-- input的name屬性值必須符合SpringSecurity規則,除非專門進行了定制,否則用戶名必須使用username,密碼必須使用password -->
                <input type="text" name="loginAcct" id="LAY-user-login-username" lay-verify="required" placeholder="用戶名" class="layui-input">
            </div>
            <div class="layui-form-item">
                <label class="layadmin-user-login-icon layui-icon layui-icon-password" for="LAY-user-login-password"></label>
                <input type="text" name="userPswd" id="LAY-user-login-password" lay-verify="required" placeholder="密碼" class="layui-input">
            </div>
            ...
            <div class="layui-form-item">
                <button type="submit" class="layui-btn layui-btn-fluid" lay-submit lay-filter="LAY-user-login-submit">登 入</button>
            </div>
            ...
        </form>

2、 賬號、密碼的請求參數名

表單中的賬號密碼name要和SpringSecurity的賬號密碼名對上。

不對上的話:要么修改頁面上的表單項的 name 屬性值,要么修改配置。如果修改配置可以調用 usernameParameter()和 passwordParameter()方法。

SpringSecurity 默認賬號的請求參數名:username 
SpringSecurity 默認密碼的請求參數名:password 

3、 去后端的配置類中配置


    //重寫configure方法進行配置
    @Override
    protected void configure(HttpSecurity httpSecurity) throws Exception {

        httpSecurity
                .authorizeRequests()                    //對請求進行授權
                .antMatchers("/index.jsp", "/layui/**")  //針對 /index.jsp以及layui下的內容進行授權
                .permitAll()                            //授權的級別:可以無條件訪問
                .anyRequest()                           //任意請求
                .authenticated()                        //需要登陸后才可以訪問
                .and()
                .formLogin()                            //設置未授權請求跳轉到登錄頁面
                .loginPage("/index.jsp")                //指定登錄頁面
                .loginProcessingUrl("/do/login.html")   //loginProcessingUrl()方法指定了登錄地址,就會覆蓋 loginPage()方法中設置的默認值 /index.jsp POST
                .permitAll()                            //為登錄頁面設置所有人都可以訪問
                .usernameParameter("loginAcct")         //定制登錄賬號的請求參數名
                .passwordParameter("userPswd")          //定制登錄密碼的請求參數名
                .defaultSuccessUrl("/main.html")        //設置登錄成功后默認前往的 URL 地址
        ;
    }

    //重寫另外一個父類的方法,來設置登錄系統的賬號密碼(單機版,不走數據庫)
    @Override
    protected void configure(AuthenticationManagerBuilder auth) throws Exception {
        //super.configure(auth);禁用默認規則
        //出現:Cannot pass a null GrantedAuthority collection 問題是由於沒有設置roles()或authorities()方法導致的。
        auth
                .inMemoryAuthentication()           //在內存身份驗證(單機版,不走數據庫)
                .withUser("zhouzhou")      //設置登錄賬號
                .password("123")                    //設置登錄密碼
                .roles("ADMIN")                     //設置角色
                .and()
                .withUser("qiongqiong")     //設置另一個登錄賬號
                .password("234")                     //設置另一個登錄密碼
                .authorities("SAVE", "DEIT")         //設置權限
        ;
    }

4、 啟動服務器測試

這是因為發送登錄請求時沒有攜帶_csrf 值造成的錯誤。

去index.jsp頁面加上

<input type="hidden" name="${_csrf.parameterName}" value="${_csrf.token}"/>

實現的最后效果:登錄成功后具體資源都可以訪問了。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM