後端登陸接口

引入依賴
spring security web mybatis druid連接池 mysql

  <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-security</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>org.mybatis.spring.boot</groupId>
            <artifactId>mybatis-spring-boot-starter</artifactId>
            <version>2.1.1</version>
        </dependency>
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>druid-spring-boot-starter</artifactId>
            <version>1.1.10</version>
        </dependency>
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <scope>runtime</scope>
            <version>5.1.28</version>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
            <exclusions>
                <exclusion>
                    <groupId>org.junit.vintage</groupId>
                    <artifactId>junit-vintage-engine</artifactId>
                </exclusion>
            </exclusions>
        </dependency>
        <dependency>
            <groupId>org.springframework.security</groupId>
            <artifactId>spring-security-test</artifactId>
            <scope>test</scope>
        </dependency>
    </dependencies>

    <build>
        <resources>
            <resource>	
                <directory>src/main/java</directory>
                <includes>
                    <include>**/*.xml</include>
                </includes>
            </resource>
            <resource>
                <directory>src/main/resources</directory>
            </resource>
        </resources>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>

application.properties

spring.datasource.username=**
spring.datasource.password=**
spring.datasource.type=com.alibaba.druid.pool.DruidDataSource
spring.datasource.url=jdbc:mysql://localhost:3306/vhr
server.port=8081

主配置類掃描xml文件和接口

@MapperScan(basePackages = "org.lyb.baiweiserver.mapper ") //掃描配置文件

Service查詢用戶

@Service
public class HrService implements UserDetailsService {
    @Autowired
    HrMapper hrMapper;
    @Override
    public UserDetails loadUserByUsername(String s) throws UsernameNotFoundException {
        Hr hr = hrMapper.loadUserByUsername(s);
        if (hr == null){
            throw new UsernameNotFoundException("用戶不存在");
        }
        return hr;
    }
}

Mapper

public interface HrMapper {
    /**
     *  根據用戶名登陸
     * @param username  用戶名
     * @return
     */
    Hr loadUserByUsername(String username);

HrMapper.xml

<select id="loadUserByUsername" resultMap="BaseResultMap">
    select * from hr where username=#{username};
  </select>

config裏面

@Configuration
public class SecurityConfig extends WebSecurityConfigurerAdapter {

    @Autowired
    HrService hrService;

    /**
     *  加密密碼編碼器
     * @return
     */
    @Bean
    PasswordEncoder passwordEncoder(){
        return new BCryptPasswordEncoder();
    }
    @Override
    protected void configure(HttpSecurity http) throws Exception {
            http.authorizeRequests() //授權
                    .anyRequest().authenticated()  //任何請求要認證
                    .and()
                    .formLogin() //登錄
                    .loginProcessingUrl("/doLogin")//登陸要處理的請求
                    .successHandler(new AuthenticationSuccessHandler() { //身份驗證成功處理程序
                        /**
                         *  認證成功方法
                         * @param req Http Servlet請求
                         * @param resp 響應
                         * @param authentication 認證
                         * @throws IOException
                         * @throws ServletException
                         */
                        @Override
                        public void onAuthenticationSuccess(HttpServletRequest req, HttpServletResponse resp,
                            Authentication authentication) throws IOException, ServletException {
                            resp.setContentType("application/json;charset=utf-8"); //響應字體
                            Hr hr =(Hr) authentication.getPrincipal(); //獲取對象認證
                            RespBean respBean = RespBean.ok("登錄成功", hr); //自定義封裝響應請求信息
                            ObjectMapper objectMapper = new ObjectMapper(); //轉換器
                            String s = objectMapper.writeValueAsString(respBean); //改成字符串
                            PrintWriter out = resp.getWriter(); //獲取流
                            out.write(s);  //寫入
                            out.flush();
                        }
                    })

                    .failureHandler(new AuthenticationFailureHandler() {

                        /**
                         *  身份驗證失敗處
                         * @param req 請求
                         * @param resp 響應
                         * @param exception 驗證異常
                         * @throws IOException
                         * @throws ServletException
                         */
                        @Override
                        public void onAuthenticationFailure(HttpServletRequest req,
                                HttpServletResponse resp, AuthenticationException exception) throws IOException, ServletException {
                                resp.setContentType("application/json;charset=utf-8");
                                RespBean respBean = RespBean.error("登陸失敗"); //自定義封裝異常
                                if (exception instanceof BadCredentialsException){
                                    respBean.setMsg("用戶名或密碼錯誤");
                                }else if (exception instanceof DisabledException){
                                    respBean.setMsg("賬戶被禁用,請聯繫管理員");
                            }
                            ObjectMapper objectMapper = new ObjectMapper();//轉換器
                            String s = objectMapper.writeValueAsString(respBean); //改字符串
                            PrintWriter writer = resp.getWriter();
                            writer.write(s); //失敗信息寫入流中
                            writer.flush();
                            writer.close();
                        }
                    })
                    .permitAll() //其它請求
                    .and()
                    .csrf()
                    .disable();
    }
}

model


/**
 *封裝請求信息
 */
public class RespBean {
    private Integer status; //狀態碼
    private String msg; //描敘
    private Object obj; //可以帶對象
    public static RespBean ok(String msg, Object obj) {
        return new RespBean(200, msg, obj);
    }
    public static RespBean ok(String msg) {
        return new RespBean(200, msg, null);
    }
    public static RespBean error(String msg, Object obj) {
        return new RespBean(500, msg, obj);
    }
    public static RespBean error(String msg) {
        return new RespBean(500, msg, null);
    }
    private RespBean() {
    }
    private RespBean(Integer status, String msg, Object obj) {

        this.status = status;
        this.msg = msg;
        this.obj = obj;
    }
    public Integer getStatus() {
        return status;
    }
    public void setStatus(Integer status) {
        this.status = status;
    }
    public String getMsg() {
        return msg;
    }
    public void setMsg(String msg) {
        this.msg = msg;
    }
    public Object getObj() {
        return obj;
    }
    public void setObj(Object obj) {
        this.obj = obj;
    }
}

http://localhost:8081/doLogin接下來和前端對接
在這裏插入圖片描述

發佈了66 篇原創文章 · 獲贊 68 · 訪問量 1萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章