ssm中拦截器配置好了,为啥idea ssm框架 报错404显示找不到该类

21:04 提问
SSM拦截器,为什么只能拦截controller请求,确不能拦截所以请求
mvc:interceptorsmvc:interceptor
大神们,我想通过这个拦截器,如果地址栏里输出其他地址不能直接访问,这该怎么拦截呢?
现在只能拦截到controller
按赞数排序
拦截器只能对action请求起作用,而过滤器则可以对几乎所有的请求 起作用 。用过滤器
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!
其他相关推荐1989人阅读
应客户要求对未注册的IP地址进行拦截
SSM框架搭建参考之前文章(谢谢)
1 创建一个类并实现HandlerInterceptor接口
package com.yx.web.
import java.io.BufferedInputS
import java.io.FileInputS
import java.io.InputS
import java.util.I
import java.util.P
import javax.servlet.http.HttpServletR
import javax.servlet.http.HttpServletR
import org.springframework.web.servlet.HandlerI
import org.springframework.web.servlet.ModelAndV
import com.yx.web.utils.UtilU
public class IpInterceptor implements HandlerInterceptor {
public void afterCompletion(HttpServletRequest arg0,
HttpServletResponse arg1, Object arg2, Exception arg3)
throws Exception {
public void postHandle(HttpServletRequest arg0, HttpServletResponse arg1,
Object arg2, ModelAndView arg3) throws Exception {
public boolean preHandle(HttpServletRequest request, HttpServletResponse arg1,
Object arg2) throws Exception {
2 重写其中的preHandle方法
public boolean preHandle(HttpServletRequest request, HttpServletResponse arg1,
Object arg2) throws Exception {
// TODO Auto-generated method stub
ip = request.getHeader("x-forwarded-for")
//针对IP是否使用代理访问进行处理
if (UtilUms.isEmpty(ip) || "unknown".equalsIgnoreCase(ip)) {
ip = request.getHeader("Proxy-Client-IP")
if (UtilUms.isEmpty(ip) || "unknown".equalsIgnoreCase(ip)) {
ip = request.getHeader("WL-Proxy-Client-IP")
if (UtilUms.isEmpty(ip) || "unknown".equalsIgnoreCase(ip)) {
ip = request.getRemoteAddr()
if (ip != null && ip.indexOf(",") != -1) {
ip = ip.substring(0, ip.indexOf(","))
Properties prop = new Properties()
//读取属性文件a.properties
String contextPath = this.getClass().getClassLoader().getResource("/").getPath()
String path=contextPath+"/ip.properties"
InputStream in = new BufferedInputStream (new FileInputStream(path))
prop.load(in)
Iterator&String& it=prop.stringPropertyNames().iterator()
while(it.hasNext()){
String key=it.next()
System.out.println(key+":"+prop.getProperty(key))
if(prop.getProperty(key).equals(ip)){
return true
System.out.println(ip)
System.out.println("ip白名单过滤"+prop.getProperty(key).equals(ip))
in.close()
return false
3 在springMvc中配置拦截器
path="/**"/&
class="com.yx.web.interceptor.IpInterceptor"&&
注:为方便建立demo,ip配置在了ip.properties中,如有需求请在数据库进行操作
ip.properties:
ip1=192.168.0.1
ip2=192.168.1.3ssm框架拦截器
时间: 15:10:58
&&&& 阅读:239
&&&& 评论:
&&&& 收藏:0
标签:&&&&&&&&&&&&&&&&&&&&&&&&&&&1.ssm框架的拦截器是在springmvc-servlet.xml配置文件中进行配置
&!-- 拦截器 --&
&mvc:interceptors&
&mvc:interceptor&
&mvc:mapping path="/**" /&
&bean class="cn.com.***.controller.common.SecurityInterceptor"&
&!-- 不需要session验证的地址 --&
&property name="excludeUrls"&
&value&/web/index&/value&
&value&/web/aboutsPage&/value&
&/property&
&/mvc:interceptor&
&/mvc:interceptors&
2.创建一个拦截器实体类,继承HandlerInterceptor,重写它的方法,preHandle是调用Controller具体方法之前拦截,postHandle是调用Controller具体方法之后拦截,afterCompletion是完成页面后调用,所以在preHandle里面写逻辑代码,如登入之后怎么做,没登录这么做,或者根据不同的登录平台进行跳转之类的逻辑
package cn.com.***.controller.
import java.util.L
import javax.servlet.http.HttpServletR
import javax.servlet.http.HttpServletR
import org.springframework.web.servlet.HandlerI
import org.springframework.web.servlet.ModelAndV
import cn.com.***.common.pojo.WSessionI
import cn.com.***.common.result.C
* 权限拦截器
public class SecurityInterceptor implements HandlerInterceptor {
private List&String& excludeU// 不需要拦截的资源
private List&String& wapU//wapurl
public List&String& getWapUrls() {
return wapU
public void setWapUrls(List&String& wapUrls) {
this.wapUrls = wapU
public List&String& getExcludeUrls() {
return excludeU
public void setExcludeUrls(List&String& excludeUrls) {
this.excludeUrls = excludeU
* 完成页面的render后调用
public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object object,
Exception exception) throws Exception {
* 在调用controller具体方法后拦截
public void postHandle(HttpServletRequest request, HttpServletResponse response, Object object,
ModelAndView modelAndView) throws Exception {
* 在调用controller具体方法前拦截
@SuppressWarnings("unchecked")
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object object) throws Exception {
//请求的路径
String contextPath=request.getContextPath();
url=request.getServletPath().toString();
StringBuffer realUrl = request.getRequestURL();
WSessionInfo sessionInfo = (WSessionInfo) request.getSession().getAttribute(Constant.SESSION_INFO);
if (sessionInfo == null) {
String isqian = url.substring(0, 4);
if (isqian.equals("/wap")) {
response.sendRedirect(contextPath + "/wap/adminLogin");
return true;
}if (isqian.equals("/web")) {
response.sendRedirect(contextPath + "/web/index");
} else if (realUrl.toString().equals(contextPath +"/web/index")) {
response.sendRedirect(contextPath + "/wap/adminLogin");
return true;
return true ;
&标签:&&&&&&&&&&&&&&&&&&&&&&&&&&&原文:http://www.cnblogs.com/-scl/p/7381761.html
教程昨日排行
&&国之画&&&& &&&&&&
&& &&&&&&&&&&&&&&
鲁ICP备号-4
打开技术之扣,分享程序人生!12333人阅读
SpringMVC整合MyBatis(51)
1.拦截定义
定义拦截器,实现HandlerInterceptor接口。接口中提供三个方法。package cn.edu.hpu.ssm.
import javax.servlet.http.HttpServletR
import javax.servlet.http.HttpServletR
import org.springframework.web.servlet.HandlerI
import org.springframework.web.servlet.ModelAndV
//测试拦截器1
public class HandlerInterceptor1 implements HandlerInterceptor{
//执行Handler方法之前执行
//用于身份认证、身份授权
//比如身份认证,如果认证通过表示当前用户没有登陆,需要此方法拦截不再向下执行
public boolean preHandle(HttpServletRequest request, HttpServletResponse response,
Object handler) throws Exception {
//return false表示拦截,不向下执行
//return true表示放行
//进入Handler方法之后,返回modelAndView之前执行
//应用场景从modelAndView出发:将公用的模型数据(比如菜单导航)在这里
//传到视图,也可以在这里统一指定视图
public void postHandle(HttpServletRequest request, HttpServletResponse response,
Object handler, ModelAndView modelAndView) throws Exception {
//执行Handler完成执行此方法
//应用场景:统一异常处理,统一日志处理
public void afterCompletion(HttpServletRequest request, HttpServletResponse response,
Object handler, Exception ex)
throws Exception {
2.拦截器配置
2.1针对HandlerMapping配置
springmvc拦截器针对HandlerMapping进行拦截设置,如果在某个HandlerMapping中配置拦截,经过该 HandlerMapping映射成功的handler最终使用该拦截器。&bean
class="org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping"&
&property name="interceptors"&
&ref bean="handlerInterceptor1"/&
&ref bean="handlerInterceptor2"/&
&/property&
&bean id="handlerInterceptor1" class="springmvc.intercapter.HandlerInterceptor1"/&
&bean id="handlerInterceptor2" class="springmvc.intercapter.HandlerInterceptor2"/&一般不推荐使用。
2.2类似全局的拦截器
springmvc配置类似全局的拦截器,springmvc框架将配置的类似全局的拦截器注入到每个HandlerMapping中。&!-- 拦截器 --&
&mvc:interceptors&
&!-- 多个拦截器,顺序执行 --&
&mvc:interceptor&
&!-- /**表示所有url包括子url路径 --&
&mvc:mapping path="/**"/&
&bean class="cn.edu.hpu.ssm.interceptor.HandlerInterceptor1"/&
&/mvc:interceptor&
&mvc:interceptor&
&mvc:mapping path="/**"/&
&bean class="cn.edu.hpu.ssm.interceptor.HandlerInterceptor2"/&
&/mvc:interceptor&
&/mvc:interceptors&
3.拦截测试
3.1测试需求
测试多个拦截器各各方法执行时机。
3.2编写两个拦截
HandlerInterceptor1.java:package cn.edu.hpu.ssm.
import javax.servlet.http.HttpServletR
import javax.servlet.http.HttpServletR
import org.springframework.web.servlet.HandlerI
import org.springframework.web.servlet.ModelAndV
//测试拦截器1
public class HandlerInterceptor1 implements HandlerInterceptor{
//执行Handler方法之前执行
//用于身份认证、身份授权
//比如身份认证,如果认证通过表示当前用户没有登陆,需要此方法拦截不再向下执行
public boolean preHandle(HttpServletRequest request, HttpServletResponse response,
Object handler) throws Exception {
System.out.println("HandlerInterceptor1......preHandle");
//return false表示拦截,不向下执行
//return true表示放行
//进入Handler方法之后,返回modelAndView之前执行
//应用场景从modelAndView出发:将公用的模型数据(比如菜单导航)在这里
//传到视图,也可以在这里统一指定视图
public void postHandle(HttpServletRequest request, HttpServletResponse response,
Object handler, ModelAndView modelAndView) throws Exception {
System.out.println("HandlerInterceptor1......postHandle");
//执行Handler完成执行此方法
//应用场景:统一异常处理,统一日志处理
public void afterCompletion(HttpServletRequest request, HttpServletResponse response,
Object handler, Exception ex)
throws Exception {
System.out.println("HandlerInterceptor1......afterHandle");
HandlerInterceptor2.java:package cn.edu.hpu.ssm.
import javax.servlet.http.HttpServletR
import javax.servlet.http.HttpServletR
import org.springframework.web.servlet.HandlerI
import org.springframework.web.servlet.ModelAndV
//测试拦截器2
public class HandlerInterceptor2 implements HandlerInterceptor{
//执行Handler方法之前执行
//用于身份认证、身份授权
//比如身份认证,如果认证通过表示当前用户没有登陆,需要此方法拦截不再向下执行
public boolean preHandle(HttpServletRequest request, HttpServletResponse response,
Object handler) throws Exception {
System.out.println("HandlerInterceptor2......preHandle");
//return false表示拦截,不向下执行
//return true表示放行
//进入Handler方法之后,返回modelAndView之前执行
//应用场景从modelAndView出发:将公用的模型数据(比如菜单导航)在这里
//传到视图,也可以在这里统一指定视图
public void postHandle(HttpServletRequest request, HttpServletResponse response,
Object handler, ModelAndView modelAndView) throws Exception {
System.out.println("HandlerInterceptor2......postHandle");
//执行Handler完成执行此方法
//应用场景:统一异常处理,统一日志处理
public void afterCompletion(HttpServletRequest request, HttpServletResponse response,
Object handler, Exception ex)
throws Exception {
System.out.println("HandlerInterceptor2......afterHandle");
3.3两个拦截器都放行
将preHandle方法的返回值设为true,然后随便访问一个controller,控制台打印一下结果:HandlerInterceptor1...preHandle
HandlerInterceptor2...preHandle
HandlerInterceptor2...postHandle
HandlerInterceptor1...postHandle
HandlerInterceptor2...afterCompletion
HandlerInterceptor1...afterCompletion
preHandle方法按顺序执行,
postHandle和afterCompletion按拦截器配置的逆向顺序执行。
3.4拦截器1放行,拦截器2不放行HandlerInterceptor1...preHandle
HandlerInterceptor2...preHandle
HandlerInterceptor1...afterCompletion
拦截器1放行,拦截器2 preHandle才会执行。
拦截器2 preHandle不放行,拦截器2 postHandle和afterCompletion不会执行。
只要有一个拦截器不放行,postHandle不会执行。
3.5拦截器1不放行,拦截器2不放行HandlerInterceptor1...preHandle
拦截器1 preHandle不放行,postHandle和afterCompletion不会执行。
拦截器1 preHandle不放行,拦截器2不执行。
4.根据测试结果,对拦截器应用。
比如:统一日志处理拦截器,需要该拦截器preHandle一定要放行,且将它放在拦截器链接中第一个位置。
比如:登陆认证拦截器,放在拦截器链接中第一个位置。权限校验拦截器,放在登陆认证拦截器之后。(因为登陆通过后才校验权限)
5拦截器应用(实现登陆认证)
(1)用户请求url
(2)拦截器进行拦截校验如果请求的url是公开地址(无需登陆即可访问的url),让放行如果用户session 不存在跳转到登陆页面如果用户session存在放行,继续操作。
5.2登陆controller方法package cn.edu.hpu.ssm.
import javax.servlet.http.HttpS
import org.springframework.stereotype.C
import org.springframework.web.bind.annotation.RequestM
@Controller
public class LoginController {
@RequestMapping("/login")
public String login(HttpSession session,String username,String password)throws Exception{
//调用serivce进行用户身份验证
//在session中保存用户身份信息
session.setAttribute("username", username);
//重定向到商品列表界面
return "redirect:/items/queryItems.action";
@RequestMapping("/logout")
public String logout(HttpSession session)throws Exception{
//清除session
session.invalidate();
//重定向到商品列表界面
return "redirect:items/queryItems.action";
登录页面:&%@ page language="java" import="java.util.*" pageEncoding="utf-8"%&
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
&!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"&
&base href="&%=basePath%&"&
&title&系统登录&/title&
&form action="${pageContext.request.contextPath }/login.action" method="post"&
用户账号:&input type="text" name="username"/&&br/&
用户密码:&input type="password" name="password"/&&br/&
&input type="submit" value="登录"/&
在商品列表那里加入:当前用户:${username }|
&c:if test="${username!=null }"&
&a href="${pageContext.request.contextPath }/logout.action"&退出&/a&
5.3登陆认证拦截实现
5.3.1代码实现package cn.edu.hpu.ssm.
import javax.servlet.http.HttpServletR
import javax.servlet.http.HttpServletR
import javax.servlet.http.HttpS
import org.springframework.web.servlet.HandlerI
import org.springframework.web.servlet.ModelAndV
//登录认证的拦截器
public class LoginInterceptor implements HandlerInterceptor{
//执行Handler方法之前执行
//用于身份认证、身份授权
//比如身份认证,如果认证通过表示当前用户没有登陆,需要此方法拦截不再向下执行
public boolean preHandle(HttpServletRequest request, HttpServletResponse response,
Object handler) throws Exception {
//获取请求的url
String url=request.getRequestURI();
//判断url是否是公开地址(实际使用时将公开地址配置到配置文件中)
if(url.indexOf("login.action")&=0){
//如果要进行登录提交,放行
//判断session
HttpSession session=request.getSession();
//从session中取出用户份信息
String username=(String)session.getAttribute("username");
if(username!=null){
//身份存在,放行
//执行这里表示用户身份需要验证,跳转到登录界面
request.getRequestDispatcher("/WEB-INF/jsp/login.jsp").forward(request, response);
//return false表示拦截,不向下执行
//return true表示放行
//进入Handler方法之后,返回modelAndView之前执行
//应用场景从modelAndView出发:将公用的模型数据(比如菜单导航)在这里
//传到视图,也可以在这里统一指定视图
public void postHandle(HttpServletRequest request, HttpServletResponse response,
Object handler, ModelAndView modelAndView) throws Exception {
System.out.println("HandlerInterceptor1......postHandle");
//执行Handler完成执行此方法
//应用场景:统一异常处理,统一日志处理
public void afterCompletion(HttpServletRequest request, HttpServletResponse response,
Object handler, Exception ex)
throws Exception {
System.out.println("HandlerInterceptor1......afterHandle");
5.3.2拦截器配置
springmvc.xml中配置:&!-- 拦截器 --&
&mvc:interceptors&
&!-- 多个拦截器,顺序执行 --&
&!-- 登录认证拦截器 --&
&mvc:interceptor&
&mvc:mapping path="/**"/&
&bean class="cn.edu.hpu.ssm.interceptor.LoginInterceptor"/&
&/mvc:interceptor&
&/mvc:interceptors&
输入商品列表的网址,结果发现被拦截在登录界面(原因:拦截器没有检测到登录用户的session,所以判定用户没有登录,没有权限查看商品列表)我们输入账号(王五)密码(随便),发现登录进去,并且看到了用户名
点击退出再次退回登录界面,再次输入商品列表的网址,结果发现依旧被拦截在登录界面,原因是session已经被清除。
转载请注明出处:
职位:中级Java开发工程师
负责:上汽系统开发与维护
专业:软件工程12级
书  号:978-7-121-33390-3
出版日期:
书籍特色:
· 经验多:百万访问量博主倾囊相授,带你走进Web开发的方方面面。
· 零基础:从简单的样例做起,逐渐深入技术核心。
· 内容全:涵盖Spring MVC与MyBatis的33个技巧,56个实例。
· 重实战:与真实项目案例相结合,深入实战开发的5层架构。
文章:31篇
阅读:67272
文章:37篇
阅读:73993
文章:51篇
阅读:58945
文章:21篇
阅读:29392
文章:87篇
阅读:155870
文章:81篇
阅读:304193
文章:24篇
阅读:31377
文章:27篇
阅读:29894
文章:35篇
阅读:81449
阅读:9077
阅读:49136
文章:16篇
阅读:18063
文章:12篇
阅读:11249
文章:19篇
阅读:14464
文章:14篇
阅读:77030
阅读:7505
阅读:2784
文章:21篇
阅读:9179他的最新文章
他的热门文章
您举报文章:
举报原因:
原文地址:
原因补充:
(最多只允许输入30个字)

我要回帖

更多关于 ssm配置拦截器 的文章

 

随机推荐