> Java > java지도 시간 > 본문

spring-boot의 로그인 필터링 기능 구현 코드

不言
풀어 주다: 2018-12-21 10:45:49
앞으로
2954명이 탐색했습니다.

이 기사의 내용은 spring-boot 로그인 필터링 기능에 관한 것입니다. 필요한 친구들이 참고할 수 있기를 바랍니다.

먼저 우리 프로젝트의 구조에 대해 간단히 이야기해보자. 프론트엔드 프로젝트는 React를 사용하고, 백엔드 프로젝트는 spring-cloud를 사용하는데, 이는 zuul 프로젝트와 기타 기능 모듈로 나누어진다. 백엔드 라우팅 및 전달을 제공하는 것 외에도 zuul 프로젝트는 전역 필터도 수행할 수 있으므로 이 프로젝트에서는 로그인 확인 기능을 작성하기로 결정했습니다.

세션 구성

Redis는 여기서 세션 정보를 저장하는 데 사용됩니다.
종속성을 다운로드하고

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
<dependency>
    <groupId>org.springframework.session</groupId>
    <artifactId>spring-session-data-redis</artifactId>
</dependency>
로그인 후 복사

를 pom에 추가합니다.

session:
    store-type: redis
    timeout: 30
redis:
    database: 0
    host: 
    password: 
    port: 6379
    timeout: 300000
로그인 후 복사
redis 클래스 구성을 추가하고 새 redisConfig 클래스를 만든 다음 여기에서

@EnableRedisHttpSession(maxInactiveIntervalInSeconds = 7200, redisFlushMode = RedisFlushMode.IMMEDIATE)
로그인 후 복사
filter

를 작성합니다. 여기에서 zuulFilter를 사용하여 각 http 요청이 이 필터를 통과하는지 확인한 다음 결정합니다. 세션 시간 초과에 사용자 이름이 있는지 여부에 따라 세션이 결정되는지 여부입니다. 시간이 초과되면 오류 메시지가 반환되고 시간 초과된 http 요청 코드에 따라 프런트 엔드가 점프됩니다.

package com.config;
import org.springframework.context.annotation.Configuration;
@Configuration
public class RedisConfig {
    public RedisConfig() {

    }
}
로그인 후 복사

스타트업 클래스에도 이 클래스를 주입해야 합니다

package com.config;
import com.netflix.zuul.ZuulFilter;
import com.netflix.zuul.context.RequestContext;
import com.ztesoft.cloud.Service.StaffService;
import com.ztesoft.cloud.model.User;
import org.springframework.beans.factory.annotation.Autowired;
import javax.servlet.http.HttpServletRequest;
public class WebSecurityFilter extends ZuulFilter {
    @Override
    public String filterType() {
        return "pre";//前置过滤器
    }
    @Override
    public int filterOrder() {
        return 0;//优先级为0,数字越大,优先级越低
    }
    @Override
    public boolean shouldFilter() {
        return true;//是否执行该过滤器,此处为true,说明需要过滤
    }
    @Autowired
    private StaffService staffService;
    @Override
    public Object run() {
        RequestContext ctx = RequestContext.getCurrentContext();
        HttpServletRequest request = ctx.getRequest();
        String queryString = request.getQueryString();
        Object username = request.getSession().getAttribute("username");
        Object password = request.getSession().getAttribute("password");
        User user = new User();
        if(username != null) {
            user.setUsername(username.toString());
        }
        if(password != null) {
            user.setPassword(password.toString());
        }
        Boolean verifyResult = this.staffService.verifyLoginUser(user);
        if ((queryString != null && queryString.indexOf("tag=process") > -1) || verifyResult) {
            ctx.setSendZuulResponse(true);// 对该请求进行路由
            ctx.setResponseStatusCode(200);
            ctx.set("isSuccess", true);// 设值,可以在多个过滤器时使用
            return null;
        } else {
            ctx.setSendZuulResponse(false);// 过滤该请求,不对其进行路由
            ctx.setResponseStatusCode(401);// 返回错误码,应该是401
            ctx.setResponseBody("session is out of time");// 返回错误内容
            ctx.set("isSuccess", false);
            return null;
        }
    }
}
로그인 후 복사
로그인 코드

는 주로 프런트엔드에서 전송된 사용자 이름과 비밀번호를 세션에 넣어서 검증하는 것입니다. 확인에 성공하면 로그인 성공이 반환되고, 그렇지 않으면 로그인 실패가 반환됩니다. 그런 다음 프런트 엔드는 로그인 상태에 따라 라우팅 점프를 수행합니다.

    @Bean
    public WebSecurityFilter accessFilter() {
        return new WebSecurityFilter();
    }
로그인 후 복사

마지막으로 창업강의 코드 올려주세요

package com.controller;

@RestController
@RequestMapping(value = "/system")
public class SystemController extends JdkSerializationRedisSerializer implements Serializable {

    @Autowired
    private StaffService staffService;

    @PostMapping("login")
    public ResponseEntity<String> login(@RequestBody User user, HttpSession session) {
        session.setAttribute("username", user.getUsername());
        session.setAttribute("password", user.getPassword());
        Boolean ret = this.staffService.verifyLoginUser(user);
        if(ret == true) {
            return new ResponseEntity<>("登陆成功", HttpStatus.OK);
        }
        return new ResponseEntity<>("登陆失败", HttpStatus.NON_AUTHORITATIVE_INFORMATION);
    }

}
로그인 후 복사


위 내용은 spring-boot의 로그인 필터링 기능 구현 코드의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

관련 라벨:
원천:segmentfault.com
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿