[Java] Dead code Java(536871061)

yeoonnii·2022년 11월 26일
0

Java

목록 보기
9/22
post-thumbnail

사용자 로그인시 DB에 토큰이 존재하면 새로 생성된 토큰으로 변경하는 코드를 작성했다

토큰 테이블은 아래와 같이 생성되어 있다


문제

JPA를 이용하여 코드를 작성하는 과정에서 Dead code Java(536871061) 가 발생했다

작성한 코드는 아래와 같다

    @PostMapping(value = "/login.json")
    public Map<String, Object> loginPOST(@RequestBody Member member) {
        Map<String, Object> map = new HashMap<>();
        try {
            // 권한정보 변경을 위한 문자배열
            String[] strRole = { member.getRole() };

            // 문자배열을 Collection타입으로 변환
            Collection<GrantedAuthority> role = AuthorityUtils.createAuthorityList(strRole);

            // 매니저를 이용한 인증, userdetailservice와 같은 기능
            UsernamePasswordAuthenticationToken token1 = new UsernamePasswordAuthenticationToken(member.getUserid(),
                    member.getUserpw(), role);

            // userdetailservice를 사용하지 못하니 같은 기능의 authenticationManager 사용
            // = DB에 저장된 회원정보와 비교
            authenticationManager.authenticate(token1);

            // 로그인 한 사용자의 토큰 생성
            String token = JwtUtil.generateToken(member.getUserid(), member.getRole());

            // TOKEN UPSERT를 위한 조회
            Token searchToken = tRepository.findTokenByMember_userid(member.getUserid());
            System.out.println("조회된 token ========> "+ searchToken.getToken());
            
            if(searchToken != null){ // 토큰이 있는경우
                    searchToken.setToken(token);
                    tRepository.save(searchToken);
                    map.put("result", searchToken.getToken());
            }
            else{ 
                //  토큰 entity에 정보저장후 리턴
                Token obj = new Token();
                obj.setToken(token);
                obj.setMember(member);
                obj.setRole(member.getRole());
                
                tRepository.save(obj);
                map.put("result", token);
            }
            map.put("status", 200);

        } catch (Exception e) {
            map.put("status", -1);
            map.put("result", e.getMessage());
        }
        return map;




Dead code가 발생한 이유

searchToken.getToken()을 출력한 시점에 searchToken이 null이 아니라고 확정이 된다.
else문에서 null이 아닌경우를 처리하려고 했기 때문에 Dead code가 발생되었다.

else문은 실행될 일이 없는 코드이기 때문에 if - else 구문이 아닌 if만 사용하여 처리해주었다.


해결

// 완료 - 로그인
    @PostMapping(value = "/login.json")
    public Map<String, Object> loginPOST(@RequestBody Member member) {
        Map<String, Object> map = new HashMap<>();
        try {
            // 권한정보 변경을 위한 문자배열
            String[] strRole = { member.getRole() };

            // 문자배열을 Collection타입으로 변환
            Collection<GrantedAuthority> role = AuthorityUtils.createAuthorityList(strRole);

            // 매니저를 이용한 인증, userdetailservice와 같은 기능
            UsernamePasswordAuthenticationToken token1 = new UsernamePasswordAuthenticationToken(member.getUserid(),
                    member.getUserpw(), role);

            // userdetailservice를 사용하지 못하니 같은 기능의 authenticationManager 사용
            // = DB에 저장된 회원정보와 비교
            authenticationManager.authenticate(token1);

            // 로그인 한 사용자의 토큰 생성
            String token = JwtUtil.generateToken(member.getUserid(), member.getRole());

            // TOKEN UPSERT를 위한 조회
            Token searchToken = tRepository.findTokenByMember_userid(member.getUserid());

            if (searchToken != null) { // 토큰이 있는경우
                // 기존토큰 삭제
                tRepository.delete(searchToken);
                System.out.println("기존토큰 삭제됨");
            }
            // 토큰 생성 후 DB 저장
            Token obj = new Token();
            obj.setToken(token);
            obj.setMember(member);
            obj.setRole(member.getRole());
           
            tRepository.save(obj);
            
            map.put("result", token);
            map.put("status", 200);

        } catch (Exception e) {
            map.put("status", -1);
            map.put("result", e.getMessage());
        }
        return map;
    }

0개의 댓글