Spring拦截器-----拦截用户必须访问

项目结构
在这里插入图片描述
web.xml配置文件

 <!--配置DispatcherServlet-->
    <servlet>
        <servlet-name>springmvc</servlet-name>
        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
        <init-param>
            <param-name>contextConfigLocation</param-name>
            <param-value>classpath:applicationContext.xml</param-value>
        </init-param>
        <load-on-startup>1</load-on-startup>
    </servlet>
    <servlet-mapping>
        <servlet-name>springmvc</servlet-name>
        <url-pattern>/</url-pattern>
    </servlet-mapping>

applicationContext.xml

<!--自动扫描指定的包-->
    <context:component-scan base-package="com.kuang.controller"></context:component-scan>

    <!--过滤静态资源-->
    <mvc:default-servlet-handler></mvc:default-servlet-handler>

    <!--开启注解-->
    <mvc:annotation-driven></mvc:annotation-driven>

    <!--视图解析器-->
    <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver" id="internalResourceViewResolver">
        <!--前缀-->
        <property name="prefix" value="/WEB-INF/jsp/"></property>
        <!--后缀-->
        <property name="suffix" value=".jsp"></property>
    </bean>
    
    

    <!--配置拦截器-->
    <mvc:interceptors>
	   <mvc:interceptor>
	   <mvc:mapping path="/want/**"/>
	   <!--bean配置的拦截器的路径-->
	   <bean class="com.kuang.config.LoginInterceptor"></bean>
	   </mvc:interceptor>
    </mvc:interceptors>
    <!--/** 包括路径及其子路径-->
    <!--/admin/* 拦截的是/admin/add等等这种 , /admin/add/user不会被拦截-->
    <!--/admin/** 拦截的是/admin/下的所有--> 

Controller层

@Controller
@RequestMapping("/want")
public class LoginController {

    //访问衣服链接
    @RequestMapping("/clothing")
    public String goClothing(Model model){
        model.addAttribute("cloth","一件花衣服");
        return "clothing";
    }

    //访问鞋链接
    @RequestMapping("/shoes")
    public String goShoes(Model model){
        model.addAttribute("shoes","送你一双骚绿色的鞋");
        return "shoes";
    }

    //登录
    @RequestMapping("/login")
    public String login(String username, String password, Model model, HttpSession session){
        System.out.println(username+"--------"+password);
        model.addAttribute("username",username);

        session.setAttribute("userLoginInfo",username);

        return "success";
    }

    //注销的方法
    @RequestMapping("/goOut")
    public String goOut(HttpSession session){
        //两种注销session的方法
        session.removeAttribute("userLoginInfo");
        //或者,但是推荐上面的
//        session.invalidate();

        return "login";
    }
}

Interceptor层

public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
        //如果有用户登录信息的Session。则放行
        if (request.getSession().getAttribute("userLoginInfo") != null){
            return true;
        }
        //如果用户访问的是登录页面,也放行
        if (request.getRequestURI().contains("login")){
            return true;
        }

        //如果用户没有登录,也不是访问登录页面,则不放行,并且让用户跳转到登录页面
        request.getRequestDispatcher("/WEB-INF/jsp/login.jsp").forward(request,response);
        return false;
    }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
下面是一个在Spring MVC中使用拦截器的完整代码示例: 首先,创建一个自定义的拦截器类 `CustomInterceptor`,实现 `HandlerInterceptor` 接口: ```java import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.springframework.stereotype.Component; import org.springframework.web.servlet.HandlerInterceptor; import org.springframework.web.servlet.ModelAndView; @Component public class CustomInterceptor implements HandlerInterceptor { @Override public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception { // 在请求处理之前进行拦截处理,返回值表示是否继续执行后续的拦截器和处理器 System.out.println("PreHandle method is called"); return true; } @Override public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception { // 请求处理之后进行拦截处理,但在视图渲染之前 System.out.println("PostHandle method is called"); } @Override public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception { // 在视图渲染之后进行拦截处理 System.out.println("AfterCompletion method is called"); } } ``` 然后,在配置类或者配置文件中注册拦截器: **使用Java配置类:** ```java import org.springframework.beans.factory.annotation.Autowired; import org.springframework.context.annotation.Configuration; import org.springframework.web.servlet.config.annotation.InterceptorRegistry; import org.springframework.web.servlet.config.annotation.WebMvcConfigurer; @Configuration public class WebConfig implements WebMvcConfigurer { @Autowired private CustomInterceptor customInterceptor; @Override public void addInterceptors(InterceptorRegistry registry) { registry.addInterceptor(customInterceptor) .addPathPatterns("/**"); // 拦截所有路径 } } ``` **使用XML配置文件:** ```xml <mvc:interceptors> <mvc:interceptor> <mvc:mapping path="/**"/> <!-- 拦截所有路径 --> <bean class="com.example.CustomInterceptor"/> </mvc:interceptor> </mvc:interceptors> ``` 在上述示例中,`CustomInterceptor` 类被注解为 `@Component`,以便被Spring容器扫描到。然后,在配置类或者配置文件中使用 `addInterceptors` 方法(Java配置类)或者 `<mvc:interceptors>` 元素(XML配置文件)来注册拦截器。 这样,当应用程序收到请求时,拦截器的 `preHandle` 方法会在请求处理之前被调用,`postHandle` 方法会在请求处理之后、视图渲染之前被调用,`afterCompletion` 方法会在视图渲染之后被调用。你可以根据自己的需求,在这些方法中编写相应的拦截逻辑。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值