Filter访问权限控制

设置登录界面的访问地址不拦截,如果直接访问除登录界面的地址时,那么此时session就为空,则直接跳转回登录界面。

话不多说,直接上代码

web.xml文件配置拦截部分代码

<!-- 检查后端用户是否登录了管理系统的过滤器配置  开始  -->  
    <filter>
        <filter-name>BackendSessionFilter</filter-name>
        <filter-class>com.Lin.jianji.filter.LoginFilter</filter-class>
        <init-param>
            <description>将当前登录的用户的信息保存在 session 中时使用的key,如果没有配置此参数,则该过滤器不起作用</description>
            <param-name>sessionKey</param-name>
            <param-value>BACKEND_SESSION_USER_KEY</param-value>
        </init-param>
        <init-param>
            <description>
                                             如果用户未登录(即在 session 中 key 为 sessionKey 的属性不存在或为空),则将请求重定向到该 url。
                                             该 url 不包含web应用的 ContextPath。
                                             如果不配置此参数,则在用户未登录系统的情况下,直接重定向到web应用的根路径(/)
            </description>
            <param-name>forwardUrl</param-name>
            <param-value>/resources/index.jsp</param-value>
        </init-param>
        <init-param>
            <description>
                                         不需要进行拦截的 url 的正则表达式,即:如果当前请求的 url 的 servletPath 能匹配该正则表达式,则直接放行(即使未登录系统)。
                                         此参数的值一般为 loginServlet 和 registServlet 等。
                                         另外,参数 redirectUrl 的值不用包含在该正则表达式中,因为 redirectUrl 对应的 url 会被自动放行。
                                         还有一点需要说明的是,该参数的值不包含web应用的 ContextPath。
            </description>
            <param-name>excepUrlRegex</param-name>
            <!-- 不拦截  -->
            <param-value>/login.action</param-value>
        </init-param>
    </filter>
    
    <filter-mapping>
        <filter-name>BackendSessionFilter</filter-name>
        <url-pattern>/resources/welocme.jsp</url-pattern>
    </filter-mapping>
    
    <filter-mapping>
        <filter-name>BackendSessionFilter</filter-name>
        <url-pattern>/welcome/*</url-pattern>
    </filter-mapping>
	<!-- 检查后端用户是否登录了管理系统的过滤器配置  结束  -->

主要的那些都用红色框框起来了

少圈了spring下的root-context.xml

里面也要有这段代码

<!-- 启动项目时Spring创建一个过滤器对象交由代理过滤器管理(DelegatingFilterProxy) -->
	<beans:bean id="BackendSessionFilter" class="com.Lin.jianji.filter.LoginFilter">

	</beans:bean>

接下来就是LoginFilter.java文件的编写

package com.Lin.jianji.filter;

import java.io.IOException;
import java.net.URLEncoder;
import java.util.regex.Pattern;

import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import com.google.common.base.Strings;

public class LoginFilter implements Filter {

    /** 要检查的 session 的名称 */
    private String sessionKey;

    /** 需要排除(不拦截)的URL的正则表达式 */
    private Pattern excepUrlPattern;
    
    /** 检查不通过时,转发的URL */
    private String forwardUrl;

    public void init(FilterConfig cfg) throws ServletException {
        sessionKey = cfg.getInitParameter("sessionKey");

        String excepUrlRegex = cfg.getInitParameter("excepUrlRegex");
        if (!Strings.isNullOrEmpty(excepUrlRegex)) {
            excepUrlPattern = Pattern.compile(excepUrlRegex);
        }

        forwardUrl = cfg.getInitParameter("forwardUrl");
        if(S
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值