
cn.bestwu.api.test.ApiTestConfiguration Maven / Gradle / Ivy
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