Commit 9abfe028 authored by dev_sky's avatar dev_sky
Browse files

feature user register

fix bug

fix security problem

fix security problem
parent ea9b5e72
Loading
Loading
Loading
Loading
+2 −1
Original line number Diff line number Diff line
@@ -35,6 +35,7 @@ public class AppConfiguration implements WebMvcConfigurer {

  public static final String LOGIN_INTERCEPTOR_PATH_PATTERN = "/**/*";
  public static final String LOGIN_PATH_PATTERN = "/login";
  public static final String REGISTER_PATH_PATTERN = "/users/register";
  public static final String PATH_PATTERN = "/**";
  public static final String LOCALE_LANGUAGE_COOKIE = "language";
  public static final int COOKIE_MAX_AGE = 3600;
@@ -76,7 +77,7 @@ public class AppConfiguration implements WebMvcConfigurer {
    //i18n
    registry.addInterceptor(localeChangeInterceptor());

    registry.addInterceptor(loginInterceptor()).addPathPatterns(LOGIN_INTERCEPTOR_PATH_PATTERN).excludePathPatterns(LOGIN_PATH_PATTERN,"/swagger-resources/**", "/webjars/**", "/v2/**", "/doc.html", "*.html", "/ui/**");
    registry.addInterceptor(loginInterceptor()).addPathPatterns(LOGIN_INTERCEPTOR_PATH_PATTERN).excludePathPatterns(LOGIN_PATH_PATTERN, REGISTER_PATH_PATTERN, "/swagger-resources/**", "/webjars/**", "/v2/**", "/doc.html", "*.html", "/ui/**");
  }


+31 −0
Original line number Diff line number Diff line
@@ -410,5 +410,36 @@ public class UsersController extends BaseController {
        }
    }

    /**
     * user register
     *
     * @param userName       user name
     * @param userPassword   user password
     * @param repeatPassword repeat password
     * @param email          user email
     */
    @ApiOperation(value="registerUser",notes = "REGISTER_USER_NOTES")
    @ApiImplicitParams({
            @ApiImplicitParam(name = "userName", value = "USER_NAME", type = "String"),
            @ApiImplicitParam(name = "userPassword", value = "USER_PASSWORD", type = "String"),
            @ApiImplicitParam(name = "repeatPassword", value = "REPEAT_PASSWORD", type = "String"),
            @ApiImplicitParam(name = "email", value = "EMAIL", type = "String"),
    })
    @PostMapping("/register")
    @ResponseStatus(HttpStatus.OK)
    @ApiException(CREATE_USER_ERROR)
    public Result<Object> registerUser(@RequestParam(value = "userName") String userName,
                               @RequestParam(value = "userPassword") String userPassword,
                               @RequestParam(value = "repeatPassword") String repeatPassword,
                               @RequestParam(value = "email") String email) throws Exception {
        userName = userName.replaceAll("[\n|\r|\t]", "");
        userPassword = userPassword.replaceAll("[\n|\r|\t]", "");
        repeatPassword = repeatPassword.replaceAll("[\n|\r|\t]", "");
        email = email.replaceAll("[\n|\r|\t]", "");
        logger.info("user self-register, userName: {}, userPassword {}, repeatPassword {}, eamil {}",
                userName, userPassword, repeatPassword, email);
        Map<String, Object> result = usersService.registerUser(userName, userPassword, repeatPassword, email);
        return returnDataList(result);
    }

}
+33 −0
Original line number Diff line number Diff line
@@ -908,4 +908,37 @@ public class UsersService extends BaseService {
            }
        }
    }

    /**
     * register user, default state is 0, default tenant_id is 1, no phone, no queue
     *
     * @param userName       user name
     * @param userPassword   user password
     * @param repeatPassword repeat password
     * @param email          email
     * @return register result code
     * @throws Exception exception
     */
    @Transactional(rollbackFor = Exception.class)
    public Map<String, Object> registerUser(String userName, String userPassword, String repeatPassword, String email) throws Exception {
        Map<String, Object> result = new HashMap<>(5);

        //check user params
        String msg = this.checkUserParams(userName, userPassword, email, "");

        if (!StringUtils.isEmpty(msg)) {
            putMsg(result, Status.REQUEST_PARAMS_NOT_VALID_ERROR,msg);
            return result;
        }

        if (!userPassword.equals(repeatPassword)) {
            putMsg(result, Status.REQUEST_PARAMS_NOT_VALID_ERROR, "two passwords are not same");
            return result;
        }

        createUser(userName, userPassword, email, 1, "", "", 0);
        putMsg(result, Status.SUCCESS);
        return result;
    }

}
+19 −0
Original line number Diff line number Diff line
@@ -268,4 +268,23 @@ public class UsersControllerTest extends AbstractControllerTest{
        Assert.assertEquals(Status.SUCCESS.getCode(),result.getCode().intValue());
        logger.info(mvcResult.getResponse().getContentAsString());
    }

    @Test
    public void testRegisterUser() throws Exception {
        MultiValueMap<String, String> paramsMap = new LinkedMultiValueMap<>();
        paramsMap.add("userName","user_test");
        paramsMap.add("userPassword","123456qwe?");
        paramsMap.add("repeatPassword", "123456qwe?");
        paramsMap.add("email","12343534@qq.com");

        MvcResult mvcResult = mockMvc.perform(post("/users/register")
                .params(paramsMap))
                .andExpect(status().isOk())
                .andExpect(content().contentType(MediaType.APPLICATION_JSON_UTF8))
                .andReturn();

        Result result = JSONUtils.parseObject(mvcResult.getResponse().getContentAsString(), Result.class);
        Assert.assertEquals(Status.SUCCESS.getCode(),result.getCode().intValue());
        logger.info(mvcResult.getResponse().getContentAsString());
    }
}
+45 −0
Original line number Diff line number Diff line
@@ -453,6 +453,51 @@ public class UsersServiceTest {
        Assert.assertTrue(CollectionUtils.isNotEmpty(userList));
    }

    @Test
    public void testRegisterUser() {
        String userName = "userTest0002~";
        String userPassword = "userTest";
        String repeatPassword = "userTest";
        String email = "123@qq.com";
        try {
            //userName error
            Map<String, Object> result = usersService.registerUser(userName, userPassword, repeatPassword, email);
            logger.info(result.toString());
            Assert.assertEquals(Status.REQUEST_PARAMS_NOT_VALID_ERROR, result.get(Constants.STATUS));

            userName = "userTest0002";
            userPassword = "userTest000111111111111111";
            //password error
            result = usersService.registerUser(userName, userPassword, repeatPassword, email);
            logger.info(result.toString());
            Assert.assertEquals(Status.REQUEST_PARAMS_NOT_VALID_ERROR, result.get(Constants.STATUS));

            userPassword = "userTest0002";
            email = "1q.com";
            //email error
            result = usersService.registerUser(userName, userPassword, repeatPassword, email);
            logger.info(result.toString());
            Assert.assertEquals(Status.REQUEST_PARAMS_NOT_VALID_ERROR, result.get(Constants.STATUS));

            //repeatPassword error
            email = "7400@qq.com";
            repeatPassword = "userPassword";
            result = usersService.registerUser(userName, userPassword, repeatPassword, email);
            logger.info(result.toString());
            Assert.assertEquals(Status.REQUEST_PARAMS_NOT_VALID_ERROR, result.get(Constants.STATUS));

            //success
            repeatPassword = "userTest0002";
            result = usersService.registerUser(userName, userPassword, repeatPassword, email);
            logger.info(result.toString());
            Assert.assertEquals(Status.SUCCESS, result.get(Constants.STATUS));

        } catch (Exception e) {
            logger.error(Status.CREATE_USER_ERROR.getMsg(),e);
            Assert.assertTrue(false);
        }
    }

    /**
     * get user
     * @return