21.03.09 Untact프로젝트( 관리자 회원관리기능, swagger 적용, 회원섬네일 추가, 각종 버그 수정 등)

2021. 3. 9. 22:23JAVA/Spring & Vue APP 프로젝트(백엔드)

# 주요 소스코드

<SwaggerConfig.java>

package com.sbs.untact.config;

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

import springfox.documentation.builders.ApiInfoBuilder;
import springfox.documentation.builders.PathSelectors;
import springfox.documentation.builders.RequestHandlerSelectors;
import springfox.documentation.service.ApiInfo;
import springfox.documentation.service.Contact;
import springfox.documentation.spi.DocumentationType;
import springfox.documentation.spring.web.plugins.Docket;
import springfox.documentation.swagger2.annotations.EnableSwagger2;

@Configuration
@EnableSwagger2
public class SwaggerConfig {

	@Bean
	public Docket api() {
		return new Docket(DocumentationType.SWAGGER_2).select()
				.apis(RequestHandlerSelectors.basePackage("com.sbs.untact.controller"))
				.paths(PathSelectors.ant("/usr/**")).build().apiInfo(apiInfo());
	}

	private ApiInfo apiInfo() {
		return new ApiInfoBuilder().title("커뮤니티 사이트 API").description("회원가입, 게시물 작성 등의 기능을 제공합니다.")
				.contact(new Contact("제작자", "https://github.com/jhs512/untactTeacher", "jangka512@gmail.com"))
				.version("0.1").build();
	}

} 

<SwaggerUiWebMvcConfigurer.java>

package com.sbs.untact.config;

import org.springframework.util.StringUtils;
import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry;
import org.springframework.web.servlet.config.annotation.ViewControllerRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;

public class SwaggerUiWebMvcConfigurer implements WebMvcConfigurer {
	private final String baseUrl;

	public SwaggerUiWebMvcConfigurer(String baseUrl) {
		this.baseUrl = baseUrl;
	}

	@Override
	public void addResourceHandlers(ResourceHandlerRegistry registry) {
		String baseUrl = StringUtils.trimTrailingCharacter(this.baseUrl, '/');
		registry.addResourceHandler(baseUrl + "/swagger-ui/**")
				.addResourceLocations("classpath:/META-INF/resources/webjars/springfox-swagger-ui/")
				.resourceChain(false);
	}

	@Override
	public void addViewControllers(ViewControllerRegistry registry) {
		registry.addViewController(baseUrl + "/swagger-ui/")
				.setViewName("forward:" + baseUrl + "/swagger-ui/index.html");
	}
} 

<list.jsp>

<%@ page language="java" contentType="text/html; charset=UTF-8"
	pageEncoding="UTF-8"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>

<%@ include file="../part/mainLayoutHead.jspf"%>

<section class="section-1">
	<div class="bg-white shadow-md rounded container mx-auto p-8 mt-8">
		<div class="flex">
			<select class="py-2 select-auth-level">
				<option value="">전체</option>
				<option value="3">일반회원</option>
				<option value="7">관리자</option>
			</select>
			<script>
				if ( !param.authLevel ) {
					param.authLevel = '';
				}
				
				$('.section-1 .select-auth-level').val(param.authLevel);
				$('.section-1 .select-auth-level').change(function() {
					location.href = '?authLevel=' + this.value;
				});
			</script>
		</div>
		<div>
			<c:forEach items="${members}" var="member">
				<c:set var="detailUrl" value="detail?id=${member.id}" />
				<div class="flex items-center mt-10">
					<a href="${detailUrl}" class="font-bold">NO. ${member.id}</a>
					<a href="${detailUrl}" class="ml-2 font-light text-gray-600">${member.regDate}</a>
					<div class="flex-grow"></div>
					<a href="?authLevel=${member.authLevel}" class="cursor-pointer px-2 py-1 bg-${member.authLevelNameColor}-600 text-${member.authLevelNameColor}-100 font-bold rounded hover:bg-${member.authLevelNameColor}-500">${member.authLevelName}</a>
				</div>
				<div class="mt-2">
					<a href="${detailUrl}" class="mt-2 text-gray-600 block">
						<span class="inline-flex justify-center items-center px-2 rounded-full bg-green-500 text-white">로그인 아이디</span>
						<span>${member.loginId}</span>
					</a>
					<a href="${detailUrl}" class="mt-2 text-gray-600 block">
						<span class="inline-flex justify-center items-center px-2 rounded-full bg-green-500 text-white">이름</span>
						<span>${member.name}</span>
					</a>
					<a href="${detailUrl}" class="mt-2 text-gray-600 block">
						<span class="inline-flex justify-center items-center px-2 rounded-full bg-green-500 text-white">로그인 아이디</span>
						<span>${member.nickname}</span>
					</a>
				</div>
				<div class="flex items-center mt-4">
					<a href="detail?id=${member.id}" class="text-blue-500 hover:underline" title="자세히 보기">
						<span>
							<i class="fas fa-info"></i>
							<span class="hidden sm:inline">자세히 보기</span>
						</span>
					</a>
					<a href="modify?id=${member.id}" class="ml-2 text-blue-500 hover:underline">
						<span>
							<i class="fas fa-edit"></i>
							<span class="hidden sm:inline">수정</span>
						</span>
					</a>
					<a onclick="if ( !confirm('삭제하시겠습니까?') ) return false;" href="doDelete?id=${member.id}" class="ml-2 text-blue-500 hover:underline">
						<span>
							<i class="fas fa-trash"></i>
							<span class="hidden sm:inline">삭제</span>
						</span>
					</a>
					<div class="flex-grow"></div>
					<div>
						<a class="flex items-center">
							<img
								src="https://images.unsplash.com/photo-1492562080023-ab3db95bfbce?ixlib=rb-1.2.1&amp;ixid=eyJhcHBfaWQiOjEyMDd9&amp;auto=format&amp;fit=crop&amp;w=731&amp;q=80"
								alt="avatar" class="mx-4 w-10 h-10 object-cover rounded-full">
							<h1 class="text-gray-700 font-bold hover:underline">${member.nickname}</h1>
						</a>
					</div>
				</div>
			</c:forEach>
		</div>
	</div>
</section>

<%@ include file="../part/mainLayoutFoot.jspf"%>