All Downloads are FREE. Search and download functionalities are using the official Maven repository.

cn.bestwu.api.test.ApiTestConfiguration Maven / Gradle / Ivy

There is a newer version: 1.3.19
Show newest version
package cn.bestwu.api.test;

import com.github.stuxuhai.jpinyin.PinyinHelper;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
import org.springframework.boot.autoconfigure.condition.ConditionalOnWebApplication;
import org.springframework.boot.web.servlet.FilterRegistrationBean;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.util.Assert;
import org.springframework.util.DigestUtils;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.servlet.config.annotation.ViewControllerRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.util.Collections;
import java.util.HashMap;
import java.util.Map;

/**
 * 系统安全配置
 *
 * @author Peter Wu
 */
@Configuration
@ConditionalOnWebApplication
public class ApiTestConfiguration {

	@ConditionalOnMissingBean(ApiTestUserRepository.class)
	@Bean
	@ConditionalOnWebApplication
	public ApiTestUserRepository apiTestUserRepository() {
		return new ApiTestUserRepository() {
			@Override public ApiTestUser findByUsername(String username) {
				return new ApiTestUser() {
					@Override public String getUsername() {
						return "admin";
					}

					@Override public String getPassword() {
						return DigestUtils.md5DigestAsHex((getUsername() + "root").getBytes());
					}
				};
			}
		};
	}

	@Bean
	public RememberMeService rememberMeService(ApiTestUserRepository apiTestUserRepository) {
		return new RememberMeService("33sDuk", apiTestUserRepository);
	}

	@Configuration
	@ConditionalOnWebApplication
	protected static class WebMvcConfigurer extends WebMvcConfigurerAdapter {

		@Override public void addViewControllers(ViewControllerRegistry registry) {
			registry.addRedirectViewController("/test", "/test/index.html");
		}

		private String[] apiPath = { "/test/pinyin", "/test/api.json", "/test/code.json", "/test/datastructure.json", "/test/field.json", "/test/tree.json" };

		@Bean
		public FilterRegistrationBean apiTestFilter(RememberMeService rememberMeService) {
			FilterRegistrationBean registrationBean = new FilterRegistrationBean(new ApiTestFilter(rememberMeService));
			registrationBean.addUrlPatterns(apiPath);
			registrationBean.setOrder(FilterRegistrationBean.REQUEST_WRAPPER_FILTER_MAX_ORDER - 9800);
			return registrationBean;
		}
	}

	@ConditionalOnWebApplication
	@RestController
	@RequestMapping("/test")
	protected static class ApiTestController {

		private Logger log = LoggerFactory.getLogger(ApiTestController.class);

		private String defaultApiTestSigninUserKey = ApiTestFilter.DEFAULT_API_TEST_SIGNIN_USER_KEY;

		private final RememberMeService rememberMeService;
		private final ApiTestUserRepository apiTestUserRepository;

		@Autowired
		public ApiTestController(RememberMeService rememberMeService, ApiTestUserRepository apiTestUserRepository) {
			this.rememberMeService = rememberMeService;
			this.apiTestUserRepository = apiTestUserRepository;
		}

		@RequestMapping(value = "/login", method = RequestMethod.POST)
		public Object login(String username, String password, Boolean remeberMe, HttpServletRequest request, HttpServletResponse response) {
			Assert.hasText(username, "请输入用户名");
			Assert.hasText(password, "请输入密码");
			if (remeberMe == null) {
				remeberMe = false;
			}

			ApiTestUser apiTestUser = apiTestUserRepository.findByUsername(username);
			if (apiTestUser == null || !password.equals(apiTestUser.getPassword())) {
				return ResponseEntity.status(HttpStatus.UNPROCESSABLE_ENTITY).body(Collections.singletonMap("message", "用户名或密码不正确"));
			}

			request.getSession().setAttribute(defaultApiTestSigninUserKey, apiTestUser);
			if (remeberMe)
				rememberMeService.onLoginSuccess(request, response, username, password);
			return ResponseEntity.noContent().build();
		}

		/**
		 * 拼音
		 *
		 * @param word word
		 * @return word对应简拼
		 */
		@RequestMapping(value = "/pinyin", method = RequestMethod.GET)
		public Object pinyin(String[] word) {
			Assert.notEmpty(word, "word不能为空");

			Map map = new HashMap<>();
			for (String w : word) {
				try {
					map.put(w, PinyinHelper.getShortPinyin(w));
				} catch (Exception e) {
					log.error(e.getMessage(), e);
				}
			}
			return ResponseEntity.ok(map);
		}
	}
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy