ssm框架实现用户登录的拦截器和过滤器[通俗易懂]

ssm框架实现用户登录的拦截器和过滤器[通俗易懂]文章只要是实现用户登录过程的验证,用拦截器可以拦截用户没有登录的情况下,不能进行访问系统页面以下是自定义拦截器工程目录实现的过程:1:新建一个interceptor拦截器包,创建一个LoginInterceptor拦截器类2:将这个类,继承HandlerInterceptor接口,并实现HandlerInterceptor这个接口的三个方法public…

大家好,又见面了,我是你们的朋友全栈君。

文章只要是实现用户登录过程的验证,用拦截器可以拦截用户没有登录的情况下,不能进行访问系统页面

以下是自定义拦截器工程目录实现的过程:

1:新建一个 interceptor 拦截器包,创建一个 LoginInterceptor 拦截器类

ssm框架实现用户登录的拦截器和过滤器[通俗易懂]

2:将这个类,继承 HandlerInterceptor 接口,并实现 HandlerInterceptor 这个接口的三个方法

public class LoginInterceptor implements HandlerInterceptor {

	@Override
	public void afterCompletion(HttpServletRequest arg0, HttpServletResponse arg1, Object arg2, Exception arg3)
			throws Exception {
		// 执行完毕,返回前拦截		
	}

	@Override
	public void postHandle(HttpServletRequest arg0, HttpServletResponse arg1, Object arg2, ModelAndView arg3)
			throws Exception {
		// 在处理过程中,执行拦截		
	}

	@Override
	public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object arg2) throws Exception {
		// 在拦截点执行前拦截,如果返回true则不执行拦截点后的操作(拦截成功)
		// 返回false则不执行拦截
		HttpSession session = request.getSession();
		//String uri = request.getRequestURI(); // 获取登录的uri,这个是不进行拦截的
		//if(session.getAttribute("LOGIN_USER")!=null || uri.indexOf("system/login")!=-1) {// 说明登录成功 或者 执行登录功能			
		if(session.getAttribute("LOGIN_USER")!=null) {
			// 登录成功不拦截
			return true;
		}else {
			// 拦截后进入登录页面
			response.sendRedirect(request.getContextPath()+"/system/login");
			return false;
		}
	}
}

3:拦截器是要配置的,将这个类,配置在 spring-mvc.xml 的配置文件中,如下:

        <!-- 配置拦截器 -->
	<mvc:interceptors>
		<mvc:interceptor>
			<!-- 拦截所有mvc控制器 -->
			<mvc:mapping path="/**"/>
			<!-- mvc:exclude-mapping是另外一种拦截,它可以在你后来的测试中对某个页面进行不拦截,这样就不用在
				LoginInterceptor的preHandler方法里面获取不拦截的请求uri地址了(优选) -->
			<mvc:exclude-mapping path="/system/login" />
			<bean class="com.lingshi.bookstore.interceptor.LoginInterceptor"></bean>			
		</mvc:interceptor>
	</mvc:interceptors>

将登陆拦截器类 LoginInterceptor,配置到里面

这个拦截器有2个知识要点:

①:

<mvc:mapping path="/**"/> 是已经拦截了所有请求,包括登录,如果后来想不拦截某个页面,就在拦截配置里面配置 
<mvc:exclude-mapping path="/system/login" />

②:也可以不在配置文件里拦截某个页面请求,在拦截类里面获取拦截路径,然后做个判断

eg:

//String uri = request.getRequestURI(); // 获取登录的uri,这个是不进行拦截的
		//if(session.getAttribute("LOGIN_USER")!=null || uri.indexOf("system/login")!=-1)

4:页面:

<div align="center">
		<br><br><br>
		<!-- 作业:post方法与get方法的区别 -->
		<form action="${pageContext.request.contextPath}/system/login" method="post">
			<p>用户登录</p>
			账号:<input name="account" type="text" />
			<br><br>
			密码:<input name="password" type="password" />
			<br><br>
			<input type="reset" value="撤 销" />
			<input type="submit" value="提 交" />
		</form>
	</div>

拦截器已经实现了。

二:过滤器

过滤器就分两步:新建过滤器类,接着配置web.xml

1:ssm框架实现用户登录的拦截器和过滤器[通俗易懂]

建一个LoginFilter 类,继承 Filter 类

public class LoginFilter implements Filter {

	@Override
	public void destroy() {
		// TODO Auto-generated method stub
		
	}

	@Override
	public void doFilter(ServletRequest arg0, ServletResponse arg1, FilterChain arg2)
			throws IOException, ServletException {
		// TODO Auto-generated method stub
		HttpServletRequest request = (HttpServletRequest)arg0;
		HttpServletResponse response = (HttpServletResponse)arg1;
		HttpSession session = request.getSession();
		
		if(session.getAttribute("LOGIN_USER")==null
				&& request.getRequestURI().indexOf("/system/login") == -1){
			// 没有登录
			response.sendRedirect(request.getContextPath()+"/system/login");
		}else{
			// 已经登录,继续请求下一级资源(继续访问)
			arg2.doFilter(arg0, arg1);
		}
		
	}

	@Override
	public void init(FilterConfig arg0) throws ServletException {
		// TODO Auto-generated method stub
		
	}
	
}

2:配置 web.xml ,在字符过滤器下面接着配置一个过滤器

	
	<!-- 使用filter实现登录控制 -->
	<filter>
		<filter-name>SessionFilter</filter-name>
		<filter-class>com.lingshi.bookstore.filter.LoginFilter</filter-class>
	</filter>
	<filter-mapping>
		<filter-name>SessionFilter</filter-name>
		<!-- 所有的管理页面需要登录后才能访问 -->
		<url-pattern>/views/*</url-pattern>
	</filter-mapping>
	

将过滤器类 LoginFilter.class 配置到过滤器配置文件中,即可完成 .

过滤器也实现了

希望此文帮助到你!

ssm框架实现用户登录的拦截器和过滤器[通俗易懂]

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/160964.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)
blank

相关推荐

  • APAP论文阅读笔记[通俗易懂]

    APAP论文阅读笔记[通俗易懂]As-Projective-As-PossibleImageStitchingwithMovingDLT论文阅读笔记论文和代码可以在这个网址找到:https://cs.adelaide.edu.au/~tjchin/apap/一、全文翻译题目:使用移动DLT进行尽可能投影的图像拼接摘要:我们专注于图像拼接的任务,通常通过估计投影扭曲来解决这一问题——当场景是平面的或当视图完全因旋转而不同时,该模型是合理的。这样的条件在实践中很容易被违反,这就产生了使用重影人工制品的缝合结果,这就需要使用去

  • pycharm 常用快捷键_pycharm下一行快捷键

    pycharm 常用快捷键_pycharm下一行快捷键1、ctrl+shift+A:万能命令行2、shift两次:查看资源文件3、ctrl+D:复制当前光标所在行4、ctrl+R:快速替换(一般不用)5、ctrl+/:用于注释或取消注释6、shift+tab:取消缩进(tab:缩进)7、Alt+Shift+上下键:选中代码移动8、…

  • word在试图打开文件时遇到错误,解决办法

    word在试图打开文件时遇到错误,解决办法有时候下载或别人发给你的文件用自己的电脑上的Word打不开,会出现下面的提示怎么办呢查后找到了一种解决办法:打开Word,选择-文件-选项点击左侧的信任中心按钮,然后选择右侧的信任中心设置进入信任中心后点击左侧的受保护视图选项卡,默认是三个选项都被选中的,如图取消勾选第一个选项“为来自Internet的文件启用受保护的视图”,点击确定后推出,然后重新打开…

  • oracle中sequence是什么意思_consequence的用法

    oracle中sequence是什么意思_consequence的用法在oracle中sequence就是序号,每次取的时候它会自动增加。sequence与表没有关系。1、CreateSequence首先要有CREATESEQUENCE或者CREATEANYSEQUENCE权限。创建语句如下:sql;”>CREATESEQUENCEseqTestINCREMENTBY1–每次加几个STARTWITH1–从1开始计数NOMAXva…

    2022年10月19日
  • Extjs grid设置单元格字体颜色,单元格背景颜色,行背景颜色

    Extjs grid设置单元格字体颜色,单元格背景颜色,行背景颜色Extjsgrid设置单元格字体颜色,单元格背景颜色,行背景颜色 一.在ColumnModel中用renderer渲染颜色:1.不定义样式:(1).字体颜色:{ header:"审核状态", dataIndex:"status", width:100, renderer:function(v){ if(v==1){ return"&lt;s…

  • 强大易用的Excel转Json工具「建议收藏」

    强大易用的Excel转Json工具「建议收藏」好久没更新了,最近配置json文件的时候发现以前用的excel转json转换器不好用了,上网找了几个都不能满足需求,于是自己用python写了一个。工具不复杂,使用简单,但能满足几乎所有excel转json的要求了,包括多层嵌套,每一层定制为列表或者字典的输出格式,复杂单元格的定制。转载请注明出处:https://blog.csdn.net/ylbs110/article/details/506…

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号