Skip to content

Commit

Permalink
新增model校验
Browse files Browse the repository at this point in the history
  • Loading branch information
CC-Cheunggg committed Apr 28, 2020
1 parent e400dec commit bb4b964
Show file tree
Hide file tree
Showing 6 changed files with 81 additions and 0 deletions.
1 change: 1 addition & 0 deletions build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -39,6 +39,7 @@ dependencies {
compile 'com.fasterxml.jackson.core:jackson-databind:2.9.5'
compile 'org.apache.ant:ant:1.10.5'
compile 'org.apache.commons:commons-exec:1.3'
compile 'org.hibernate.validator:hibernate-validator:6.1.4.Final'
compile fileTree(dir: 'localLibs', include: ['*.jar'])


Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
package com.cheung.shadowsocks.common;

import com.cheung.shadowsocks.model.SSModel;

import javax.validation.ConstraintValidator;
import javax.validation.ConstraintValidatorContext;

class MessageConstraintValidator implements ConstraintValidator<SSModelValidator, SSModel> {

@Override
public boolean isValid(SSModel value, ConstraintValidatorContext context) {
return (value.getHost() != null) && (value.getPort() != 0);
}
}
36 changes: 36 additions & 0 deletions src/main/java/com/cheung/shadowsocks/common/SSModelValidator.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,36 @@
/*******************************************************************************
* $Header$
* $Revision$
* $Date$
*
*==============================================================================
*
* Copyright (c) 2016-2026 Primeton Technologies, Ltd.
* All rights reserved.
*
* Created on 2020��4��28��
*******************************************************************************/


package com.cheung.shadowsocks.common;

import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

import javax.validation.Constraint;
import javax.validation.Payload;

@Target({ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Constraint(validatedBy = {MessageConstraintValidator.class})
public @interface SSModelValidator {

String message() default "error";

Class<?>[] groups() default {};

Class<? extends Payload>[] payload() default {};

}
2 changes: 2 additions & 0 deletions src/main/java/com/cheung/shadowsocks/model/SSModel.java
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
package com.cheung.shadowsocks.model;

import com.cheung.shadowsocks.common.SSModelValidator;
import com.cheung.shadowsocks.encryption.ICrypt;
import io.netty.channel.ChannelHandlerContext;
import io.netty.handler.codec.socks.SocksAddressType;
Expand All @@ -11,6 +12,7 @@
* Created by cheungrp on 18/7/3.
*/
@Data
@SSModelValidator(message = "host and port cannot be empty")
public class SSModel {

private ChannelHandlerContext channelHandlerContext;
Expand Down
5 changes: 5 additions & 0 deletions src/main/java/com/cheung/shadowsocks/proxy/ProxyHandler.java
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@
import com.cheung.shadowsocks.encryption.ICrypt;
import com.cheung.shadowsocks.model.SSModel;
import com.cheung.shadowsocks.utils.BootContext;
import com.cheung.shadowsocks.utils.ValidateUtils;
import io.netty.buffer.ByteBuf;
import io.netty.buffer.Unpooled;
import io.netty.channel.Channel;
Expand Down Expand Up @@ -43,6 +44,10 @@ public ProxyHandler(SSModel ssModel) {
Attribute<SSModel> ssModelAttribute = this.channelHandlerContext.channel().attr(ss_model);
ssModelAttribute.setIfAbsent(ssModel);
tsn.compareAndSet("", ssModel.getTsn());
String message = ValidateUtils.utils.validate(ssModel);
if (!"".equals(message)) {
throw new IllegalArgumentException(message);
}
init(ssModel.getHost(), ssModel.getPort());
sendData(ssModel.getCacheData(), Boolean.TRUE, ssModel.getTsn());
}
Expand Down
23 changes: 23 additions & 0 deletions src/main/java/com/cheung/shadowsocks/utils/ValidateUtils.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
package com.cheung.shadowsocks.utils;

import org.hibernate.validator.HibernateValidator;

import javax.validation.ConstraintViolation;
import javax.validation.Validation;
import javax.validation.Validator;
import java.util.Set;

public enum ValidateUtils {
utils;

private Validator validator = Validation.byProvider(HibernateValidator.class)
.configure()
.failFast(true)
.buildValidatorFactory()
.getValidator();

public <T> String validate(T object) {
Set<ConstraintViolation<T>> validate = validator.validate(object);
return validate.stream().findFirst().map(ConstraintViolation::getMessage).orElse("");
}
}

0 comments on commit bb4b964

Please sign in to comment.