SpringMVC配置拦截器实现登录控制的方法
程序员文章站
2024-03-31 17:02:16
springmvc读取cookie判断用户是否登录,对每一个action都要进行判断。之前使用jstl标签在页面上判断session如果没有登录就使用如下代码跳转到登录页面...
springmvc读取cookie判断用户是否登录,对每一个action都要进行判断。之前使用jstl标签在页面上判断session如果没有登录就使用如下代码跳转到登录页面。
<c:if test="${sessionscope.login == null || sessionscope.login == false}"> <!-- 未登录 --> <c:redirect url="/login"/> </c:if> <c:if test="${sessionscope.login}"> <!-- 已登录 --> </c:if>
但是测试发现如果session过期,页面渲染就会无故中断并且不会跳转到登录页面。故尝试使用拦截器来进行登录判断。
拦截器配置文件如下
<!-- <mvc:mapping path="/**" /> 如果只写一个*,则不能拦截类似/*/*的请求。静态资源的请求需要判断不进行拦截 --> <mvc:interceptors> <mvc:interceptor> <mvc:mapping path="/**" /> <bean class="com.ts.settle.tools.interceptor.logininterceptor"> <property name="excludedurls"> <list> <value>/login</value> <value>/static/</value> </list> </property> </bean> </mvc:interceptor> </mvc:interceptors>
拦截器实现类如下
public class logininterceptor implements handlerinterceptor { private avatarlogger logger = avatarloggerfactory.getlogger(this.getclass()); private list<string> excludedurls; /** * 在dispatcherservlet完全处理完请求后被调用 * 当拦截器抛出异常时,依然会从当前拦截器往回执行所的拦截器的aftercompletion() */ public void aftercompletion(httpservletrequest request, httpservletresponse response, object handler, exception exception) throws exception { } //在业务处理器处理请求执行完成后,生成视图之前执行的动作 public void posthandle(httpservletrequest request, httpservletresponse response, object handler, modelandview modelandview) throws exception { } /** * 在业务处理器处理请求之前被调用 * 如果返回false 则退出本拦截器,本拦截器后面的posthandle与aftercompletion不再执行 */ public boolean prehandle(httpservletrequest request, httpservletresponse response, object handler) throws exception { string requesturi = request.getrequesturi(); for (string url : excludedurls) { if (requesturi.contains(url)) { return true; } } httpsession session = request.getsession(); boolean login = (boolean) session.getattribute("login"); if (login == null || !login) { //system.out.println(request.getcontextpath()); logger.info("pedirect to login page"); response.sendredirect(request.getcontextpath() + "/login"); } return true; } public void setexcludedurls(list<string> excludedurls) { this.excludedurls = excludedurls; } }
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。
上一篇: Java单例模式实现静态内部类方法示例
下一篇: java制作仿微信视频播放控件