【SSM】后台字段验证

使用校验框架validation和JSR303进行字段验证

JSR 303 是 Java 为 Bean 数据合法性校验提供的标准框架,它已经包含在 JavaEE 6.0 中 ,JSR 303 通过在 Bean 属性上标注类似于 @NotNull、@Max 等标准的注解,指定校验规则,并通过标准的验证接口对 Bean 进行验证。
Hibernate Validator 是 JSR 303 的一个参考实现,除支持所有标准的校验注解外,它还支持以下的扩展注解。

包依赖:
以下版本没有与spring版本5发生包冲突

<dependency>
          <groupId>org.hibernate</groupId>
          <artifactId>hibernate-validator</artifactId>
          <version>5.4.1.Final</version>
      </dependency>
      <dependency>
          <groupId>javax.validation</groupId>
          <artifactId>validation-api</artifactId>
          <version>1.1.0.Final</version>
      </dependency>
      <dependency>
          <groupId>org.jboss.logging</groupId>
          <artifactId>jboss-logging</artifactId>
          <version>3.3.0.Final</version>
      </dependency>
      <dependency>
          <groupId>com.fasterxml</groupId>
          <artifactId>classmate</artifactId>
          <version>1.3.1</version>
      </dependency>
      <dependency>
          <groupId>org.hibernate.validator</groupId>
          <artifactId>hibernate-validator-annotation-processor</artifactId>
          <version>6.1.0.Final</version>
      </dependency>

spring配置文件:

<!-- 校验器 -->
    <bean id="validator"
          class="org.springframework.validation.beanvalidation.LocalValidatorFactoryBean">
        <!-- 校验器-->
        <property name="providerClass" value="org.hibernate.validator.HibernateValidator" />
        <!-- 指定校验使用的资源文件,在文件中配置校验的错误信息,如果不指定则默认使用classpath下的ValidationMessages.properties -->
        <property name="validationMessageSource" ref="messageSource" />
    </bean>
    <!-- 校验错误信息配置文件 -->
    <bean id="messageSource"
          class="org.springframework.context.support.ReloadableResourceBundleMessageSource">
        <!-- 资源文件名,使用basenames,不用加后缀名-->
        <property name="basenames">
            <list>
                <value>classpath:CustomValidationMessages</value>
            </list>
        </property>
        <!-- 资源文件编码格式 -->
        <property name="fileEncodings" value="utf-8" />
        <!-- 对资源文件内容缓存时间,单位秒 -->
        <property name="cacheSeconds" value="120" />
    </bean>

springmvc配置文件:

	<!--自动注入bean-->
    <mvc:annotation-driven />

在bean类配置验证信息:

@Setter@Getter
public class User implements Serializable {
    private Integer uid;
    @NotNull
    private String uname;
    @Email(message = "请输入正确的邮箱!")
    private String uemail;
    @NotNull
    private String upassword;
    @Max(value = 150,message = "请输入合法年龄")
    @Min(value = 0,message = "请输入合法年龄")
    private Integer uage;
}

检验规则参考:

 @Null   被注释的元素必须为 null       
@NotNull    被注释的元素必须不为 null       
 @AssertTrue     被注释的元素必须为 true       
@AssertFalse    被注释的元素必须为 false       
@Min(value)     被注释的元素必须是一个数字,其值必须大于等于指定的最小值       
 @Max(value)     被注释的元素必须是一个数字,其值必须小于等于指定的最大值       
@DecimalMin(value)  被注释的元素必须是一个数字,其值必须大于等于指定的最小值       
@DecimalMax(value)  被注释的元素必须是一个数字,其值必须小于等于指定的最大值       
@Size(max=, min=)   被注释的元素的大小必须在指定的范围内       
@Digits (integer, fraction)     被注释的元素必须是一个数字,其值必须在可接受的范围内       
@Past   被注释的元素必须是一个过去的日期       
@Future     被注释的元素必须是一个将来的日期       
@Pattern(regex=,flag=)  被注释的元素必须符合指定的正则表达式       

@NotBlank(message =)   验证字符串非null,且长度必须大于0       
@Email  被注释的元素必须是电子邮箱地址       
@Length(min=,max=)  被注释的字符串的大小必须在指定的范围内       
@NotEmpty   被注释的字符串的必须非空       
@Range(min=,max=,message=)  被注释的元素必须在合适的范围内 

controller类:

 /*
    * 用户注册处理
    * */
    @RequestMapping(path="/signup")
    public RestResult signup(@RequestBody @Valid User user, BindingResult bindingResult){
        // 验证表单数据合法性
         //不合法
        if(bindingResult.hasErrors()){
            List<FieldError> fieldErrors = bindingResult.getFieldErrors();
            Map<String ,Object> errMap = new HashMap<>();
            //输出错误信息
            for(FieldError fe : fieldErrors){
                System.out.println(fe.getField()+" : "+fe.getDefaultMessage());
                errMap.put(fe.getField(),fe.getDefaultMessage());
            }
            // 以json的形式返回给浏览器 
            return resultGenerator.getFailResult("",errMap,errMap.size());
        }

        //调用service层方法 注册
        try{
            userService.addUser(user);
            return resultGenerator.getSuccessResult();
        }catch (Exception e){
            return resultGenerator.getFailResult(e.getMessage());
        }
    }
 /*
   * 用户登录处理
   * */
    @RequestMapping(path = "/signin")
    public RestResult signin(@RequestBody@Valid User user, BindingResult bindingResult){
        System.out.println(user);
        // 验证数据
        if(bindingResult.hasErrors()){
            List<FieldError> fieldErrors = bindingResult.getFieldErrors();
            Map<String ,Object> errMap = new HashMap<>();
            //输出错误信息
            for(FieldError fe : fieldErrors){
                System.out.println(fe.getField()+" : "+fe.getDefaultMessage());
                errMap.put(fe.getField(),fe.getDefaultMessage());
            }
            return resultGenerator.getFailResult("",errMap,errMap.size());
        }

        // 数据库验证合法性
        try{
            userService.checkUser(user);
            // 登录操作
            //.....
            return resultGenerator.getSuccessResult();
        }catch (Exception e){
            return resultGenerator.getFailResult(e.getMessage());
        }
    }

返回给浏览器的json:

{code: 400, msg: "", count: 1, data: {uage: "请输入合法年龄"}}
Java Spring Security中,后台登录(也称为身份验证)是通过处理用户的用户名和密码来验证用户身份的过程。Spring Security是一个强大的框架,用于简化Web应用程序的安全管理。 下面是后台登录的基本步骤: 1. **配置Spring Security**: 首先,在Spring Boot项目中添加Spring Security依赖,并配置WebSecurityConfigurerAdapter或使用XML配置文件。这通常包括设置`SecurityFilterChain`,指定登录页面和默认的登录处理器。 2. **定义登录表单**: 创建一个HTML表单,包含用户名(username)和密码(password)字段,通常POST到/login或/SecuredEndpoint(需要登录才能访问的URL)。 3. **登录处理器**: 在Spring Security中,`AuthenticationManager`负责验证提交的用户名和密码。你可以自定义`UserDetailsService`来加载用户信息,或者用内置的`InMemoryUserDetailsManager`作为简单的示例,其中存储硬编码的用户数据。 4. **`@Autowired`处理器**: 使用`@Autowired`注解将`AuthenticationProvider`注入到`AuthenticationManager`中,Spring会自动调用其`authenticate()`方法来验证用户。 5. **登录拦截器**: `UsernamePasswordAuthenticationFilter`或类似的过滤器会拦截登录请求,尝试从请求参数中获取用户名和密码,然后进行身份验证。 6. **授权管理**: 登录成功后,Spring Security还会检查用户的权限,通过`AccessDecisionManager`或自定义`AccessDecisionVoter`来确定用户是否有权访问某个资源。 7. **异常处理**: 如果用户输入无效或验证失败,Spring Security会返回相应的错误消息或重定向到错误处理页面。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值