You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@inlong.apache.org by he...@apache.org on 2022/06/24 07:26:55 UTC
[inlong] branch master updated: [INLONG-4684][Manager] Add enums validation for controller (#4744)
This is an automated email from the ASF dual-hosted git repository.
healchow pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/inlong.git
The following commit(s) were added to refs/heads/master by this push:
new 7370a65fc [INLONG-4684][Manager] Add enums validation for controller (#4744)
7370a65fc is described below
commit 7370a65fca2d725701e484127a269a0323063cb4
Author: leosanqing <st...@qq.com>
AuthorDate: Fri Jun 24 15:26:48 2022 +0800
[INLONG-4684][Manager] Add enums validation for controller (#4744)
---
.../IntListValuable.java} | 18 +++++--
.../StringListValuable.java} | 18 +++++--
.../inlong/manager/common/enums/UserTypeEnum.java | 23 ++++++--
.../inlong/manager/common/pojo/user/LoginUser.java | 8 ++-
.../inlong/manager/common/pojo/user/UserInfo.java | 27 +++++-----
.../manager/common/pojo/user/UserRoleCode.java | 4 +-
.../manager/common/validation/InEnumInt.java | 51 ++++++++++++++++++
.../common/validation/InEnumIntValidator.java | 63 ++++++++++++++++++++++
.../manager/common/validation/InEnumString.java | 51 ++++++++++++++++++
.../common/validation/InEnumStringValidator.java | 62 +++++++++++++++++++++
.../manager/service/core/impl/UserServiceImpl.java | 4 +-
.../manager/web/auth/WebAuthorizingRealm.java | 2 +-
.../web/config/ControllerExceptionHandler.java | 4 +-
.../manager/web/controller/AnnoController.java | 6 +--
.../web/controller/InlongGroupController.java | 2 +-
.../manager/web/controller/UserController.java | 7 +--
.../manager/web/controller/AnnoControllerTest.java | 58 ++++++++++++++++++--
17 files changed, 363 insertions(+), 45 deletions(-)
diff --git a/inlong-manager/manager-common/src/main/java/org/apache/inlong/manager/common/pojo/user/UserRoleCode.java b/inlong-manager/manager-common/src/main/java/org/apache/inlong/manager/common/enums/IntListValuable.java
similarity index 72%
copy from inlong-manager/manager-common/src/main/java/org/apache/inlong/manager/common/pojo/user/UserRoleCode.java
copy to inlong-manager/manager-common/src/main/java/org/apache/inlong/manager/common/enums/IntListValuable.java
index c9a5b0b15..dbdaf7a09 100644
--- a/inlong-manager/manager-common/src/main/java/org/apache/inlong/manager/common/pojo/user/UserRoleCode.java
+++ b/inlong-manager/manager-common/src/main/java/org/apache/inlong/manager/common/enums/IntListValuable.java
@@ -15,13 +15,21 @@
* limitations under the License.
*/
-package org.apache.inlong.manager.common.pojo.user;
+package org.apache.inlong.manager.common.enums;
+
+import java.util.List;
/**
- * User role code.
+ * An interface that generates a list of Int
+ * e.g. for generating enum values
*/
-public class UserRoleCode {
+public interface IntListValuable {
+
+ /**
+ * generates a list of Int
+ *
+ * @return list of Integer values
+ */
+ List<Integer> valueList();
- public static final String ADMIN = "Admin";
- public static final String OPERATOR = "Operator";
}
diff --git a/inlong-manager/manager-common/src/main/java/org/apache/inlong/manager/common/pojo/user/UserRoleCode.java b/inlong-manager/manager-common/src/main/java/org/apache/inlong/manager/common/enums/StringListValuable.java
similarity index 71%
copy from inlong-manager/manager-common/src/main/java/org/apache/inlong/manager/common/pojo/user/UserRoleCode.java
copy to inlong-manager/manager-common/src/main/java/org/apache/inlong/manager/common/enums/StringListValuable.java
index c9a5b0b15..edfb8c85d 100644
--- a/inlong-manager/manager-common/src/main/java/org/apache/inlong/manager/common/pojo/user/UserRoleCode.java
+++ b/inlong-manager/manager-common/src/main/java/org/apache/inlong/manager/common/enums/StringListValuable.java
@@ -15,13 +15,21 @@
* limitations under the License.
*/
-package org.apache.inlong.manager.common.pojo.user;
+package org.apache.inlong.manager.common.enums;
+
+import java.util.List;
/**
- * User role code.
+ * An interface that generates a list of String
+ * e.g. for generating enum values
*/
-public class UserRoleCode {
+public interface StringListValuable {
+
+ /**
+ * generates a list of String
+ *
+ * @return list of String values
+ */
+ List<String> valueList();
- public static final String ADMIN = "Admin";
- public static final String OPERATOR = "Operator";
}
diff --git a/inlong-manager/manager-common/src/main/java/org/apache/inlong/manager/common/enums/UserTypeEnum.java b/inlong-manager/manager-common/src/main/java/org/apache/inlong/manager/common/enums/UserTypeEnum.java
index 25d2e2f6c..d89af2581 100644
--- a/inlong-manager/manager-common/src/main/java/org/apache/inlong/manager/common/enums/UserTypeEnum.java
+++ b/inlong-manager/manager-common/src/main/java/org/apache/inlong/manager/common/enums/UserTypeEnum.java
@@ -21,14 +21,22 @@ import com.fasterxml.jackson.annotation.JsonValue;
import lombok.Getter;
import java.util.Arrays;
+import java.util.List;
+import java.util.stream.Collectors;
/**
* User type enum
*/
-public enum UserTypeEnum {
+public enum UserTypeEnum implements IntListValuable {
- Admin(0), // has all privilege
- Operator(1), // No privilege to manage the system
+ /**
+ * Has all privilege
+ */
+ ADMIN(0),
+ /**
+ * No privilege to manage the system
+ */
+ OPERATOR(1),
;
@Getter
@@ -39,6 +47,10 @@ public enum UserTypeEnum {
this.code = code;
}
+ private static final List<Integer> ARRAYS = Arrays.stream(values())
+ .map(UserTypeEnum::getCode)
+ .collect(Collectors.toList());
+
public static UserTypeEnum parse(Integer value) {
return Arrays.stream(UserTypeEnum.class.getEnumConstants())
.filter(x -> x.getCode().equals(value))
@@ -46,4 +58,9 @@ public enum UserTypeEnum {
.orElse(null);
}
+ @Override
+ public List<Integer> valueList() {
+ return ARRAYS;
+ }
+
}
diff --git a/inlong-manager/manager-common/src/main/java/org/apache/inlong/manager/common/pojo/user/LoginUser.java b/inlong-manager/manager-common/src/main/java/org/apache/inlong/manager/common/pojo/user/LoginUser.java
index 23c0ee09f..4583dfe55 100644
--- a/inlong-manager/manager-common/src/main/java/org/apache/inlong/manager/common/pojo/user/LoginUser.java
+++ b/inlong-manager/manager-common/src/main/java/org/apache/inlong/manager/common/pojo/user/LoginUser.java
@@ -21,6 +21,8 @@ import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
+import javax.validation.constraints.NotBlank;
+
/**
* Login user and password
*/
@@ -28,9 +30,11 @@ import lombok.Data;
@ApiModel("Login user and password")
public class LoginUser {
- @ApiModelProperty("username")
+ @NotBlank
+ @ApiModelProperty(value = "username", required = true)
private String username;
- @ApiModelProperty("password")
+ @NotBlank
+ @ApiModelProperty(value = "password", required = true)
private String password;
}
diff --git a/inlong-manager/manager-common/src/main/java/org/apache/inlong/manager/common/pojo/user/UserInfo.java b/inlong-manager/manager-common/src/main/java/org/apache/inlong/manager/common/pojo/user/UserInfo.java
index 10b6eacbb..cc6f9dadc 100644
--- a/inlong-manager/manager-common/src/main/java/org/apache/inlong/manager/common/pojo/user/UserInfo.java
+++ b/inlong-manager/manager-common/src/main/java/org/apache/inlong/manager/common/pojo/user/UserInfo.java
@@ -24,7 +24,11 @@ import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import org.apache.inlong.manager.common.enums.UserTypeEnum;
-import org.apache.inlong.manager.common.util.Preconditions;
+import org.apache.inlong.manager.common.validation.InEnumInt;
+
+import javax.validation.constraints.Min;
+import javax.validation.constraints.NotBlank;
+import javax.validation.constraints.NotNull;
/**
* User info, including username, password, etc.
@@ -42,23 +46,22 @@ public class UserInfo {
* user type
* {@link UserTypeEnum}
*/
- @ApiModelProperty("type: 0 - manager, 1 - operator")
+ @NotNull
+ @InEnumInt(UserTypeEnum.class)
+ @ApiModelProperty(value = "type: 0 - manager, 1 - operator", required = true)
private Integer type;
- @ApiModelProperty("username")
+ @NotBlank
+ @ApiModelProperty(value = "username", required = true)
private String username;
- @ApiModelProperty("password")
+ @NotBlank
+ @ApiModelProperty(value = "password", required = true)
private String password;
- @ApiModelProperty("valid days")
+ @NotNull
+ @Min(1)
+ @ApiModelProperty(value = "valid days", required = true)
private Integer validDays;
- public void checkValid() {
- Preconditions.checkNotEmpty(username, "username should not be empty");
- Preconditions.checkNotEmpty(password, "password should not be empty");
- Preconditions.checkNotNull(validDays, "valid days should not be empty");
- UserTypeEnum userType = UserTypeEnum.parse(type);
- Preconditions.checkNotNull(userType, "user type incorrect");
- }
}
diff --git a/inlong-manager/manager-common/src/main/java/org/apache/inlong/manager/common/pojo/user/UserRoleCode.java b/inlong-manager/manager-common/src/main/java/org/apache/inlong/manager/common/pojo/user/UserRoleCode.java
index c9a5b0b15..aea10be85 100644
--- a/inlong-manager/manager-common/src/main/java/org/apache/inlong/manager/common/pojo/user/UserRoleCode.java
+++ b/inlong-manager/manager-common/src/main/java/org/apache/inlong/manager/common/pojo/user/UserRoleCode.java
@@ -22,6 +22,6 @@ package org.apache.inlong.manager.common.pojo.user;
*/
public class UserRoleCode {
- public static final String ADMIN = "Admin";
- public static final String OPERATOR = "Operator";
+ public static final String ADMIN = "ADMIN";
+ public static final String OPERATOR = "OPERATE";
}
diff --git a/inlong-manager/manager-common/src/main/java/org/apache/inlong/manager/common/validation/InEnumInt.java b/inlong-manager/manager-common/src/main/java/org/apache/inlong/manager/common/validation/InEnumInt.java
new file mode 100644
index 000000000..46dd490c7
--- /dev/null
+++ b/inlong-manager/manager-common/src/main/java/org/apache/inlong/manager/common/validation/InEnumInt.java
@@ -0,0 +1,51 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.inlong.manager.common.validation;
+
+import org.apache.inlong.manager.common.enums.IntListValuable;
+
+import javax.validation.Constraint;
+import javax.validation.Payload;
+import java.lang.annotation.Documented;
+import java.lang.annotation.ElementType;
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.annotation.Target;
+
+@Target({
+ ElementType.METHOD,
+ ElementType.FIELD,
+ ElementType.ANNOTATION_TYPE,
+ ElementType.CONSTRUCTOR,
+ ElementType.PARAMETER,
+ ElementType.TYPE_USE
+})
+@Retention(RetentionPolicy.RUNTIME)
+@Documented
+@Constraint(validatedBy = InEnumIntValidator.class)
+public @interface InEnumInt {
+
+ Class<? extends IntListValuable> value();
+
+ String message() default "must in {value}";
+
+ Class<?>[] groups() default {};
+
+ Class<? extends Payload>[] payload() default {};
+
+}
diff --git a/inlong-manager/manager-common/src/main/java/org/apache/inlong/manager/common/validation/InEnumIntValidator.java b/inlong-manager/manager-common/src/main/java/org/apache/inlong/manager/common/validation/InEnumIntValidator.java
new file mode 100644
index 000000000..0f5b61646
--- /dev/null
+++ b/inlong-manager/manager-common/src/main/java/org/apache/inlong/manager/common/validation/InEnumIntValidator.java
@@ -0,0 +1,63 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.inlong.manager.common.validation;
+
+import com.google.common.base.Joiner;
+import org.apache.inlong.manager.common.enums.IntListValuable;
+
+import javax.validation.ConstraintValidator;
+import javax.validation.ConstraintValidatorContext;
+import java.util.Collections;
+import java.util.List;
+
+/**
+ * Check whether the incoming Integer type parameter is in the corresponding enum value
+ */
+public class InEnumIntValidator implements ConstraintValidator<InEnumInt, Integer> {
+
+ private List<Integer> values;
+
+ @Override
+ public void initialize(InEnumInt annotation) {
+ IntListValuable[] values = annotation.value().getEnumConstants();
+ if (values.length == 0) {
+ this.values = Collections.emptyList();
+ } else {
+ this.values = values[0].valueList();
+ }
+ }
+
+ @Override
+ public boolean isValid(Integer value, ConstraintValidatorContext context) {
+ if (value == null || values.contains(value)) {
+ return true;
+ }
+
+ // disable default msg
+ context.disableDefaultConstraintViolation();
+ // Add the error message again
+ context.buildConstraintViolationWithTemplate(
+ context.getDefaultConstraintMessageTemplate()
+ .replace("{value}", Joiner.on(",").join(values))
+ )
+ .addConstraintViolation();
+ return false;
+ }
+
+}
+
diff --git a/inlong-manager/manager-common/src/main/java/org/apache/inlong/manager/common/validation/InEnumString.java b/inlong-manager/manager-common/src/main/java/org/apache/inlong/manager/common/validation/InEnumString.java
new file mode 100644
index 000000000..643e23c52
--- /dev/null
+++ b/inlong-manager/manager-common/src/main/java/org/apache/inlong/manager/common/validation/InEnumString.java
@@ -0,0 +1,51 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.inlong.manager.common.validation;
+
+import org.apache.inlong.manager.common.enums.StringListValuable;
+
+import javax.validation.Constraint;
+import javax.validation.Payload;
+import java.lang.annotation.Documented;
+import java.lang.annotation.ElementType;
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.annotation.Target;
+
+@Target({
+ ElementType.METHOD,
+ ElementType.FIELD,
+ ElementType.ANNOTATION_TYPE,
+ ElementType.CONSTRUCTOR,
+ ElementType.PARAMETER,
+ ElementType.TYPE_USE
+})
+@Retention(RetentionPolicy.RUNTIME)
+@Documented
+@Constraint(validatedBy = InEnumIntValidator.class)
+public @interface InEnumString {
+
+ Class<? extends StringListValuable> value();
+
+ String message() default "must in {value}";
+
+ Class<?>[] groups() default {};
+
+ Class<? extends Payload>[] payload() default {};
+
+}
diff --git a/inlong-manager/manager-common/src/main/java/org/apache/inlong/manager/common/validation/InEnumStringValidator.java b/inlong-manager/manager-common/src/main/java/org/apache/inlong/manager/common/validation/InEnumStringValidator.java
new file mode 100644
index 000000000..d238ca29c
--- /dev/null
+++ b/inlong-manager/manager-common/src/main/java/org/apache/inlong/manager/common/validation/InEnumStringValidator.java
@@ -0,0 +1,62 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.inlong.manager.common.validation;
+
+import com.google.common.base.Joiner;
+import org.apache.inlong.manager.common.enums.StringListValuable;
+
+import javax.validation.ConstraintValidator;
+import javax.validation.ConstraintValidatorContext;
+import java.util.Collections;
+import java.util.List;
+
+/**
+ * Check whether the incoming String type parameter is in the corresponding enum value
+ */
+public class InEnumStringValidator implements ConstraintValidator<InEnumString, String> {
+
+ private List<String> values;
+
+ @Override
+ public void initialize(InEnumString annotation) {
+ StringListValuable[] values = annotation.value().getEnumConstants();
+ if (values.length == 0) {
+ this.values = Collections.emptyList();
+ } else {
+ this.values = values[0].valueList();
+ }
+ }
+
+ @Override
+ public boolean isValid(String value, ConstraintValidatorContext context) {
+ if (value == null || values.contains(value)) {
+ return true;
+ }
+
+ // disable default msg
+ context.disableDefaultConstraintViolation();
+ context.buildConstraintViolationWithTemplate(
+ context.getDefaultConstraintMessageTemplate()
+ .replace("{value}", Joiner.on(",").join(values))
+ )
+ .addConstraintViolation();
+ return false;
+ }
+
+}
+
diff --git a/inlong-manager/manager-service/src/main/java/org/apache/inlong/manager/service/core/impl/UserServiceImpl.java b/inlong-manager/manager-service/src/main/java/org/apache/inlong/manager/service/core/impl/UserServiceImpl.java
index 7f003f9c4..e1e6c2e1b 100644
--- a/inlong-manager/manager-service/src/main/java/org/apache/inlong/manager/service/core/impl/UserServiceImpl.java
+++ b/inlong-manager/manager-service/src/main/java/org/apache/inlong/manager/service/core/impl/UserServiceImpl.java
@@ -104,7 +104,7 @@ public class UserServiceImpl implements UserService {
// Whether the current user is an administrator
UserEntity currentUserEntity = getByName(currentUser);
- Preconditions.checkTrue(currentUserEntity.getAccountType().equals(UserTypeEnum.Admin.getCode()),
+ Preconditions.checkTrue(currentUserEntity.getAccountType().equals(UserTypeEnum.ADMIN.getCode()),
"The current user is not a manager and does not have permission to update users");
UserEntity entity = userMapper.selectByPrimaryKey(userInfo.getId());
@@ -142,7 +142,7 @@ public class UserServiceImpl implements UserService {
// Whether the current user is an administrator
UserEntity entity = getByName(currentUser);
- Preconditions.checkTrue(entity.getAccountType().equals(UserTypeEnum.Admin.getCode()),
+ Preconditions.checkTrue(entity.getAccountType().equals(UserTypeEnum.ADMIN.getCode()),
"The current user is not a manager and does not have permission to delete users");
userMapper.deleteByPrimaryKey(userId);
diff --git a/inlong-manager/manager-web/src/main/java/org/apache/inlong/manager/web/auth/WebAuthorizingRealm.java b/inlong-manager/manager-web/src/main/java/org/apache/inlong/manager/web/auth/WebAuthorizingRealm.java
index 174ad36c1..37f09b480 100644
--- a/inlong-manager/manager-web/src/main/java/org/apache/inlong/manager/web/auth/WebAuthorizingRealm.java
+++ b/inlong-manager/manager-web/src/main/java/org/apache/inlong/manager/web/auth/WebAuthorizingRealm.java
@@ -60,7 +60,7 @@ public class WebAuthorizingRealm extends AuthorizingRealm {
UserDetail userDetail = new UserDetail();
userDetail.setUserName(username);
userDetail.setRoles(Sets.newHashSet(userEntity.getAccountType() == 0
- ? UserTypeEnum.Admin.name() : UserTypeEnum.Operator.name()));
+ ? UserTypeEnum.ADMIN.name() : UserTypeEnum.OPERATOR.name()));
return new SimpleAuthenticationInfo(userDetail, userEntity.getPassword(), getName());
}
diff --git a/inlong-manager/manager-web/src/main/java/org/apache/inlong/manager/web/config/ControllerExceptionHandler.java b/inlong-manager/manager-web/src/main/java/org/apache/inlong/manager/web/config/ControllerExceptionHandler.java
index dfe7623ea..c79659457 100644
--- a/inlong-manager/manager-web/src/main/java/org/apache/inlong/manager/web/config/ControllerExceptionHandler.java
+++ b/inlong-manager/manager-web/src/main/java/org/apache/inlong/manager/web/config/ControllerExceptionHandler.java
@@ -73,7 +73,7 @@ public class ControllerExceptionHandler {
StringBuilder builder = new StringBuilder();
BindingResult result = e.getBindingResult();
result.getFieldErrors().forEach(
- error -> builder.append(error.getField()).append(":")
+ error -> builder.append(error.getField()).append(": ")
.append(error.getDefaultMessage()).append(System.lineSeparator())
);
@@ -100,7 +100,7 @@ public class ControllerExceptionHandler {
StringBuilder builder = new StringBuilder();
e.getBindingResult().getFieldErrors().forEach(
- error -> builder.append(error.getField()).append(":")
+ error -> builder.append(error.getField()).append(": ")
.append(error.getDefaultMessage()).append(System.lineSeparator())
);
return Response.fail(builder.toString());
diff --git a/inlong-manager/manager-web/src/main/java/org/apache/inlong/manager/web/controller/AnnoController.java b/inlong-manager/manager-web/src/main/java/org/apache/inlong/manager/web/controller/AnnoController.java
index b3b7480b6..6840f118e 100644
--- a/inlong-manager/manager-web/src/main/java/org/apache/inlong/manager/web/controller/AnnoController.java
+++ b/inlong-manager/manager-web/src/main/java/org/apache/inlong/manager/web/controller/AnnoController.java
@@ -29,6 +29,7 @@ import org.apache.shiro.SecurityUtils;
import org.apache.shiro.authc.UsernamePasswordToken;
import org.apache.shiro.subject.Subject;
import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
@@ -48,7 +49,7 @@ public class AnnoController {
UserService userService;
@PostMapping("/login")
- public Response<String> login(@RequestBody LoginUser loginUser) {
+ public Response<String> login(@Validated @RequestBody LoginUser loginUser) {
Subject subject = SecurityUtils.getSubject();
UsernamePasswordToken token = new UsernamePasswordToken(loginUser.getUsername(), loginUser.getPassword());
@@ -59,8 +60,7 @@ public class AnnoController {
}
@PostMapping("/doRegister")
- public Response<Boolean> doRegister(@RequestBody UserInfo userInfo) {
- userInfo.checkValid();
+ public Response<Boolean> doRegister(@Validated @RequestBody UserInfo userInfo) {
return Response.success(userService.create(userInfo));
}
diff --git a/inlong-manager/manager-web/src/main/java/org/apache/inlong/manager/web/controller/InlongGroupController.java b/inlong-manager/manager-web/src/main/java/org/apache/inlong/manager/web/controller/InlongGroupController.java
index 8310aaa51..918917f13 100644
--- a/inlong-manager/manager-web/src/main/java/org/apache/inlong/manager/web/controller/InlongGroupController.java
+++ b/inlong-manager/manager-web/src/main/java/org/apache/inlong/manager/web/controller/InlongGroupController.java
@@ -78,7 +78,7 @@ public class InlongGroupController {
@ApiOperation(value = "Get inlong group list by paginating")
public Response<PageInfo<InlongGroupListResponse>> listByCondition(@RequestBody InlongGroupPageRequest request) {
request.setCurrentUser(LoginUserUtils.getLoginUserDetail().getUserName());
- request.setIsAdminRole(LoginUserUtils.getLoginUserDetail().getRoles().contains(UserTypeEnum.Admin.name()));
+ request.setIsAdminRole(LoginUserUtils.getLoginUserDetail().getRoles().contains(UserTypeEnum.ADMIN.name()));
return Response.success(groupService.listByPage(request));
}
diff --git a/inlong-manager/manager-web/src/main/java/org/apache/inlong/manager/web/controller/UserController.java b/inlong-manager/manager-web/src/main/java/org/apache/inlong/manager/web/controller/UserController.java
index 748cb1bd5..27e8bec93 100644
--- a/inlong-manager/manager-web/src/main/java/org/apache/inlong/manager/web/controller/UserController.java
+++ b/inlong-manager/manager-web/src/main/java/org/apache/inlong/manager/web/controller/UserController.java
@@ -31,6 +31,7 @@ import org.apache.inlong.manager.common.util.LoginUserUtils;
import org.apache.inlong.manager.service.core.UserService;
import org.apache.shiro.authz.annotation.RequiresRoles;
import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.DeleteMapping;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
@@ -43,6 +44,7 @@ import org.springframework.web.bind.annotation.RestController;
/**
* User related interface
*/
+@Validated
@RestController
@RequestMapping("/user")
@Api(tags = "User - Auth")
@@ -60,8 +62,7 @@ public class UserController {
@PostMapping("/register")
@ApiOperation(value = "Register user")
@RequiresRoles(value = UserRoleCode.ADMIN)
- public Response<Boolean> register(@RequestBody UserInfo userInfo) {
- userInfo.checkValid();
+ public Response<Boolean> register(@Validated @RequestBody UserInfo userInfo) {
return Response.success(userService.create(userInfo));
}
@@ -73,7 +74,7 @@ public class UserController {
@PostMapping("/update")
@ApiOperation(value = "Update user info")
- public Response<Integer> update(@RequestBody UserInfo userInfo) {
+ public Response<Integer> update(@Validated @RequestBody UserInfo userInfo) {
String currentUser = LoginUserUtils.getLoginUserDetail().getUserName();
return Response.success(userService.update(userInfo, currentUser));
}
diff --git a/inlong-manager/manager-web/src/test/java/org/apache/inlong/manager/web/controller/AnnoControllerTest.java b/inlong-manager/manager-web/src/test/java/org/apache/inlong/manager/web/controller/AnnoControllerTest.java
index 32b996033..fd91352ea 100644
--- a/inlong-manager/manager-web/src/test/java/org/apache/inlong/manager/web/controller/AnnoControllerTest.java
+++ b/inlong-manager/manager-web/src/test/java/org/apache/inlong/manager/web/controller/AnnoControllerTest.java
@@ -35,6 +35,9 @@ import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.
class AnnoControllerTest extends WebBaseTest {
+ // Password contains uppercase and lowercase numeric special characters
+ private static final String TEST_PWD = "test_#$%%Y@UI$123";
+
@Test
void testLogin() throws Exception {
LoginUser loginUser = new LoginUser();
@@ -56,12 +59,34 @@ class AnnoControllerTest extends WebBaseTest {
Assertions.assertTrue(SecurityUtils.getSubject().isAuthenticated());
}
+ @Test
+ void testLoginFailByWrongPwd() throws Exception {
+ LoginUser loginUser = new LoginUser();
+ loginUser.setUsername("admin");
+ // Wrong pwd
+ loginUser.setPassword("test_wrong_pwd");
+
+ MvcResult mvcResult = mockMvc.perform(
+ post("/anno/login")
+ .content(JsonUtils.toJsonString(loginUser))
+ .contentType(MediaType.APPLICATION_JSON_UTF8)
+ .accept(MediaType.APPLICATION_JSON)
+ )
+ .andExpect(status().isOk())
+ .andReturn();
+
+ Response<String> response = getResBody(mvcResult, String.class);
+ Assertions.assertFalse(response.isSuccess());
+ Assertions.assertEquals("Username or password was incorrect, or the account has expired",
+ response.getErrMsg());
+ }
+
@Test
void testRegister() throws Exception {
UserInfo userInfo = UserInfo.builder()
.username("test_name")
- .password("test!!!!2343434")
- .type(UserTypeEnum.Admin.getCode())
+ .password(TEST_PWD)
+ .type(UserTypeEnum.ADMIN.getCode())
.validDays(88888)
.build();
@@ -81,9 +106,10 @@ class AnnoControllerTest extends WebBaseTest {
@Test
void testRegisterFailByExistName() throws Exception {
UserInfo userInfo = UserInfo.builder()
+ // Username already exists in the init sql
.username("admin")
- .password("test!!!!2343434")
- .type(UserTypeEnum.Admin.getCode())
+ .password(TEST_PWD)
+ .type(UserTypeEnum.ADMIN.getCode())
.validDays(88888)
.build();
@@ -118,4 +144,28 @@ class AnnoControllerTest extends WebBaseTest {
Assertions.assertFalse(SecurityUtils.getSubject().isAuthenticated());
}
+ @Test
+ void testRegisterFailByInvalidType() throws Exception {
+ UserInfo userInfo = UserInfo.builder()
+ .username("admin11")
+ .password(TEST_PWD)
+ // invalidType
+ .type(3)
+ .validDays(88888)
+ .build();
+
+ MvcResult mvcResult = mockMvc.perform(
+ post("/anno/doRegister")
+ .content(JsonUtils.toJsonString(userInfo))
+ .contentType(MediaType.APPLICATION_JSON_UTF8)
+ .accept(MediaType.APPLICATION_JSON)
+ )
+ .andExpect(status().isOk())
+ .andReturn();
+
+ Response<Boolean> resBody = getResBody(mvcResult, Boolean.class);
+ Assertions.assertFalse(resBody.isSuccess());
+ Assertions.assertEquals("type: must in 0,1\n", resBody.getErrMsg());
+ }
+
}