JavaEE 之 后台验证+拦截器

1.Validator后台验证

  a.在web.xml中配置

      <listener>
        <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
    </listener>
    <context-param>
        <param-name>contextConfigLocation</param-name>
        <param-value>
        /WEB-INF/mySpring-*.xml
        </param-value>
    </context-param>
      <servlet>
        <servlet-name>myValidator</servlet-name>
        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
        <init-param>
            <param-name>contextConfigLocation</param-name>
            <param-value>
              /WEB-INF/mySpring-*.xml
          </param-value>
        </init-param>
        <load-on-startup>1</load-on-startup>
    </servlet>
    <servlet-mapping>
        <servlet-name>myValidator</servlet-name>
        <url-pattern>*.do</url-pattern>
    </servlet-mapping>

  b.在mySpring-servlet.xml中配置

    <!-- 启动注解驱动 -->
    <mvc:annotation-driven validator="validator"/>
    <!--启用自动扫描 -->
    <context:component-scan base-package="com.wode.controller" />

    <bean id="validator"
        class="org.springframework.validation.beanvalidation.LocalValidatorFactoryBean ">
        <property name="providerClass" value="org.hibernate.validator.HibernateValidator" />
    </bean>

  c.Controller中

    @RequestMapping(path="login",method=RequestMethod.POST)
    public ModelAndView login(@Valid UserBean user,BindingResult br){
        ModelAndView mod = new ModelAndView();
        if(br.hasErrors()){
            mod.setViewName("login");
            return mod;
        }else{
            mod.setViewName("main");
            mod.addObject("userName",user.getUserName());
            return mod;
        }
        
    }

  d.在Bean中

    @NotEmpty(message = "不能为空")
    @Length(max=16, min=8, message= "账户必须是8-16位")
    private String userName;
    
    @NotEmpty(message = "不能为空")
    private String userPwd;

  e.在html中

<%@ taglib prefix="spring" uri="http://www.springframework.org/tags/form" %>
    <spring:form action="login.do" method="post" commandName="userBean">
        用户名:<input type="text" name="userName"><spring:errors delimiter="," path="userName"></spring:errors><br/>
         密码:<input type="password" name="userPwd"><spring:errors delimiter="," path="userPwd"></spring:errors><br/> 
         <input type="submit">
    </spring:form>

 

 

2.Interceptors拦截器

  a.在mySpring-servlet.xml中配置

    <mvc:interceptors>
        <mvc:interceptor>
            <mvc:mapping path="/*"/>
            <mvc:exclude-mapping path="/login.do"/>
            <bean class="com.wode.util.MyInterceptor" id="MyInterceptor"></bean>
        </mvc:interceptor>
    </mvc:interceptors>

  b.建拦截器类

    ①方法一:继承HandlerInterceptorAdapter类

public class MyInterceptor extends HandlerInterceptorAdapter{
    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler)
            throws Exception {
        // TODO Auto-generated method stub
        boolean flag = false;
        HttpSession session = request.getSession();
        if(session.getAttribute("user") != null){
            flag=true;
        }else{
            response.sendRedirect("login.jsp");
        }
        return flag;
    }        
}

    ②方法一:实现HandlerInterceptor接口

public class MyInterceptor2 implements HandlerInterceptor {

    @Override
    public void afterCompletion(HttpServletRequest arg0, HttpServletResponse arg1, Object arg2, Exception arg3)
            throws Exception {
        // TODO Auto-generated method stub
        System.out.println("方法执行之后视图生成之前拦截");
        
    }

    @Override
    public void postHandle(HttpServletRequest arg0, HttpServletResponse arg1, Object arg2, ModelAndView arg3)
            throws Exception {
        // TODO Auto-generated method stub
        System.out.println("方法执行之后拦截");
        
    }

    @Override
    public boolean preHandle(HttpServletRequest arg0, HttpServletResponse arg1, Object arg2) throws Exception {
        // TODO Auto-generated method stub
        System.out.println("方法执行之前拦截");
        //ture--接着执行  false 停止执行
        //session 中如果没有用户信息 就重定向到登录页面
        return true;
    }

}

 

转载于:https://www.cnblogs.com/vettel0329/p/6763905.html

JavaEE中的拦截器是一种常见的应用程序组件,它可以在请求到达目标资源之前或之后执行某些操作。以下是JavaEE中使用拦截器的一些方法和步骤: 1. 创建一个类并实现javax.servlet.Filter接口,该接口定义了doFilter()方法,该方法在请求到达目标资源之前或之后执行某些操作。 ```java public class MyFilter implements javax.servlet.Filter { public void init(FilterConfig config) throws ServletException { // 初始化操作 } public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException { // 在请求到达目标资源之前执行的操作 chain.doFilter(request, response); // 调用下一个过滤器或目标资源 // 在请求到达目标资源之后执行的操作 } public void destroy() { // 销毁操作 } } ``` 2. 在web.xml文件中配置过滤器,指定拦截的URL模式和拦截器类。 ```xml <filter> <filter-name>MyFilter</filter-name> <filter-class>com.example.MyFilter</filter-class> </filter> <filter-mapping> <filter-name>MyFilter</filter-name> <url-pattern>/user/*</url-pattern> </filter-mapping> ``` 上述配置表示拦截以/user/开头的所有URL请求,并使用MyFilter类进行处理。 3. 在Servlet中使用注解配置拦截器。 ```java @WebServlet("/user") @ServletSecurity(@HttpConstraint(rolesAllowed = {"admin"})) public class MyServlet extends HttpServlet { // Servlet代码 } ``` 上述代码使用@WebServlet注解指定了Servlet的URL模式,使用@ServletSecurity注解指定了需要的安全角色。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值