导航:首页 > 净水问答 > 用过滤器拦截登录

用过滤器拦截登录

发布时间:2022-06-23 05:05:37

1. cas有些请求路径不需要单点登录过滤器拦截

业务系统web应用在使用单点登录组件时,有些请求路径不需要单点登录过滤器拦截,比如公共开放的路径,不需要认证都可以自由访问的路径,单点登录过滤器配置的映射路径一般以通配符匹配路径,但要把这些路径单独提取出来,让过滤器不拦截做单点登录处理,就需要对原有过滤器进行扩展改造,才能实现这个功能。

扩展实现代码如下:

public class CASFilter implements Filter {

public static enum ResponseType {
BREAK, GOON, RETURN
}

...

public void doFilter(
ServletRequest request,
ServletResponse response,
FilterChain fc){

。。。

CASReceipt receipt = (CASReceipt) session.getAttribute(CAS_FILTER_RECEIPT);

if (receipt != null && isReceiptAcceptable(receipt)) {
log.trace("CAS_FILTER_RECEIPT attribute was present and acceptable - passing request through filter..");
fc.doFilter(request, response);
return;
}else{
responeType = beforeDoSSOFilter(request, response);
if(ResponseType.RETURN==responeType){
return ;
}else if(ResponseType.BREAK==responeType) {
fc.doFilter(request, response);
return;
} //else go on
}

}

//过滤器的前置处理

public ResponseType beforeDoSSOFilter(ServletRequest request,
ServletResponse response) {
return ResponseType.GOON;

}

}

注:主要看原CASFilter 类红字部分扩展代码。

扩展实现类BMCASFilter

package com.sitechasia.sso.bmext;

public class BMCASFilter extends CASFilter {
private final Log log = LogFactory.getLog(this.getClass());
private static String ssoclient_passedPathSet;//设置不被sso过滤器拦截的请求路径,需要符合url路径通配符,多个路径可以","分割
public static final String PASSEDPATHSET_INIT_PARAM="passedPathSet";//web.xml配置文件中的参数
@Override
public void init(FilterConfig config) throws ServletException {
super.init(config);
ssoclient_passedPathSet = SSOClientPropertiesSingleton.getInstance().getProperty(ClientConstants.SSOCLIENT_PASSEDPATHSET)==null?config.getInitParameter(PASSEDPATHSET_INIT_PARAM):SSOClientPropertiesSingleton.getInstance().getProperty(ClientConstants.SSOCLIENT_PASSEDPATHSET);
}

@Override
public ResponseType beforeDoSSOFilter(ServletRequest request,
ServletResponse response) {
if (ssoclient_passedPathSet != null) {//路径过滤
HttpServletRequest httpRequest =(HttpServletRequest)request;
String requestPath = httpRequest.getRequestURI();
// String ls_requestPath = UrlUtils.buildFullRequestUrl(httpRequest.getScheme(), httpRequest.getServerName(), httpRequest.getServerPort(), requestPath, null);

PathMatcher matcher = new AntPathMatcher();
String passedPaths[]=null;
passedPaths =ssoclient_passedPathSet.split(",");

if(passedPaths!=null){
boolean flag;
for (String passedPath : passedPaths) {
flag = matcher.match(passedPath, requestPath);//ls_requestPath
if(flag){
log.info("sso client request path '"+requestPath+"'is matched,filter chain will be continued.");
return ResponseType.BREAK;
}
}
}
}
return ResponseType.GOON;
}

}

web.xml文件中配置修改如下:

<filter>
<description>单点登陆请求过滤器</description>
<filter-name>CASFilter</filter-name>
<filter-class>com.sitechasia.sso.dmext.filter.DMCASFilter</filter-class>

...

<init-param>
<description>排除路径</description>
<param-name>passedPathSet</param-name>
<param-value>
/**/restful/userLogin/findPassword,
/**/restful/userLogin/findIllegalLoginCount,
/**/restful/tenantManager/**,
/**/restful/lock/**,
/**/restful/export/**
</param-value>
</init-param>
</filter>

<filter-mapping>
<filter-name>CASFilter</filter-name>
<url-pattern>/index.jsp</url-pattern>
< /filter-mapping>

。。。

注:红字部分为相应配置内容扩展部分

经过上述这样扩展,配置的排除路径作为请求时,单点登录过滤拦截就会忽略处理,实现了目标功能要求。

2. java web登陆状态过滤器 图片也被拦截了,怎么办

在过滤器中添加代码String uri = request.getRequestURI();
过滤uri后缀是.js,.css的不进行校验就好了,另外一种方法则相反,判断你要的后缀,然后过滤,其他的都放行

3. 一个网站的权限管理,用过滤器还是拦截器更好

Struts2项目通过使用Struts的if标签进行了session判断,使得未登录的用户不能看到页面,但是这 种现仅仅在view层进行,如果未登录用户直接在地址栏输入登录用户才能访问的地址,那么相应的action还是会执行,仅仅是不让用户看到罢了。这样显然是不好的,所以研究了一下Struts2的权限验证。
权限最核心的是业务逻辑,具体用什么技术来实现就简单得多。
通常:用户与角色建立多对多关系,角色与业务模块构成多对多关系,权限管理在后者关系中。
对权限的拦截,如果系统请求量大,可以用Struts2拦截器来做,请求量小可以放在filter中。但一般单级拦截还不够,要做到更细粒度的权限控制,还需要多级拦截。

不大理解filter(过滤器)和interceptor(拦截器)的区别,遂google之。博文中有介绍:
1、拦截器是基于java的反射机制的,而过滤器是基于函数回调 。
2、过滤器依赖与servlet容器,而拦截器不依赖与servlet容器 。
3、拦截器只能对action请求起作用,而过滤器则可以对几乎所有的请求 起作用 。
4、拦截器可以访问action上下文、值栈里的对象,而过滤器不能 。
5、在action的生命周期中,拦截器可以多次被调用,而过滤器只能在容 器初始化时被调用一次 。

4. java怎么实现对某些需要登录才能查看的页面进行拦截不需要登录的jsp页面不需要拦截!请高手赐教!

如果是简单的页面权限控制,采用过滤器完全就可以实现了。 实现思路:
1. 设计需要权限访问的页面存放在指定的目录,如: /A/xxx.JSP 。 不需要登录访问的页面则不存放在A目录下
2. 自己写个过滤器, 过滤器拦截的URL为 /A/* (url-mapping的配置); 过滤器的逻辑是,只有登录的请求,才forward请求的页面,没有登录的请求则跳转到登陆页面

如果是复杂的权限控制,可以考虑采用spring security 组件来实现,从而节省开发时间

5. 判断用户登录是用springmvc 拦截器还是filter

在struts2中用过filter过滤器,在springmvc中还有拦截器,它们都能过滤请求,但是到底有什么区别呢?
一、定义

拦截器 :是在面向切面编程的就是在你的service或者一个方法,前调用一个方法,或者在方法后调用一个方法比如动态代理就是拦截器的简单实现,在你调用方法前打印出字符串(或者做其它业务逻辑的操作),也可以在你调用方法后打印出字符串,甚至在你抛出异常的时候做业务逻辑的操作。
过滤器:是在javaweb中,你传入的request、response提前过滤掉一些信息,或者提前设置一些参数,然后再传入servlet或者struts的action进行业务逻辑,比如过滤掉非法url(不是login.do的地址请求,如果用户没有登陆都过滤掉),或者在传入servlet或者 struts的action前统一设置字符集,或者去除掉一些非法字符.。
二、xml文件配置
1.filter
该过滤器的方法是创建一个类XXXFilter实现此接口,并在该类中的doFilter方法中声明过滤规则,然后在配置文件web.xml中声明他所过滤的路径

<filter>
<filter-name>XXXFilter</filter-name>
<filter-class>
com.web.util.XXXFilter
</filter-class>
</filter>

<filter-mapping>
<filter-name>XXXFilter</filter-name>
<url-pattern>*.action</url-pattern>
</filter-mapping>
<filter>
<filter-name>XXXFilter</filter-name>
<filter-class>
com.web.util.XXXFilter
</filter-class>
</filter>

<filter-mapping>
<filter-name>XXXFilter</filter-name>
<url-pattern>*.action</url-pattern>
</filter-mapping>
2.Interceptor

它也要实现HandlerInterceptor 接口,这里只介绍方法注解配置

<!-- 拦截器 -->
<mvc:interceptors>
<!-- 多个拦截器,顺序执行 -->
<mvc:interceptor>
<mvc:mapping path="/entryOrJsonController/*" /><!-- 如果不配置或/*,将拦截所有的Controller -->
<bean class="com.wy.interceptor.CommonInterceptor"></bean>
</mvc:interceptor>
</mvc:interceptors>
<!-- 拦截器 -->
<mvc:interceptors>
<!-- 多个拦截器,顺序执行 -->
<mvc:interceptor>
<mvc:mapping path="/entryOrJsonController/*" /><!-- 如果不配置或/*,将拦截所有的Controller -->
<bean class="com.wy.interceptor.CommonInterceptor"></bean>
</mvc:interceptor>
</mvc:interceptors>

三、具体区别

filter
Interceptor

多个的执行顺序
根据filter mapping配置的先后顺序
按照配置的顺序,但是可以通过order控制顺序

规范
在Servlet规范中定义的,是Servlet容器支持的
Spring容器内的,是Spring框架支持的。

使用范围
只能用于Web程序中
既可以用于Web程序,也可以用于Application、Swing程序中。

深度
Filter在只在Servlet前后起作用
拦截器能够深入到方法前后、异常抛出前后等

四、总结
两者的本质区别:拦截器是基于java的反射机制的,而过滤器是基于函数回调。从灵活性上说拦截器功能更强大些,Filter能做的事情,他都能做,而且可以在请求前,请求后执行,比较灵活。Filter主要是针对URL地址做一个编码的事情、过滤掉没用的参数、安全校验(比较泛的,比如登录不登录之类),太细的话,还是建议用interceptor。不过还是根据不同情况选择合适的。

6. C#怎么用过滤器实现防止用户在没有登陆的情况下直接访问登陆后的那些页面

登陆后为了能标识出用户已登陆。
一般都是将登陆信息写进Session中,或用Cookie保存。

所以内你只需要在那些登陆后容才能访问的页面的load事件里。判断一下Session里面的那个值存在不存在即可。

比如。登陆成功后添加了一个用户名的Session
Session.Add("UserName",用户名变量);

那么在那个页面判断
if(Session["UserName"] == null)
{
Response.Redict("default.aspx");//跳转回首页
}

7. springmvc验证登录用过滤器还是拦截器

先执行filter,只有限制性过滤器之后才可以进入容器执行拦截

8. 如何用Filter实现对注册用户是否登录的过滤

下面是我从前写的项目里用的用户过滤。供你参考。你可以去www.mldn.cn上看看,那儿有过滤器的视频教程。
package filter;

import java.io.*;

import javax.servlet.*;
import javax.servlet.http.* ;

//对用户是否登录进行过滤
public class UserFilter implements Filter
{

//过滤器初始化
public void init(FilterConfig filterConfig) throws ServletException
{

}

//实现Filter接口主方法
public void doFilter(ServletRequest request,

ServletResponse response,

FilterChain chain) throws ServletException,IOException
{
response.setContentType("text/html ;charset=GBK");
request.setCharacterEncoding("GBK");
PrintWriter out=response.getWriter();

HttpServletRequest req=(HttpServletRequest)request;
HttpSession session=req.getSession();
//System.out.println(session.getAttribute("user"));

//user是用户登录后session.setAtrribute("user",×××)中的user
if(session.getAttribute("user")!=null){
chain.doFilter(request, response);
}
else{//未登录,后退
out.println("<script language='javascript'>alert('你还未登录');");
out.println("history.go(-1);</script>");

}
}
//过滤器销毁
public void destroy(){}
}

9. java web登录后的各种请求在浏览器地址不变,过滤器该怎样拦截每次的请求

public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
HttpServletRequest req = (HttpServletRequest)request;
if(req.getSession().getAttribute("user")==null){
req.setAttribute("error", "请你先登录");
//非法请求才会进到这里面,在这里保存请求的url地址,在成功登录后再进行跳转
req.getSession().setAttribute("goUrl", req.getRequestURL()+"?"+ req.getQueryString());
request.getRequestDispatcher("/ulogin.jsp").forward(request, response);
}

else{
chain.doFilter(request, response);
}
}
上面的代码是过滤器中的代码
下面的是servlet中的代码
if(request.getSession().getAttribute("goUrl")!=null){
String url = (String)request.getSession().getAttribute("goUrl");
response.sendRedirect(url);
}
else{
response.sendRedirect("/webshopping/index.jsp");
}

10. jsp中过滤器可以拦截请求和响应吗

过滤器可以动态地拦截请求和响应,以变换或使用包含在请求或响应中的信息。

阅读全文

与用过滤器拦截登录相关的资料

热点内容
聚甲醛树脂ab胶 浏览:873
污水处理设备拆除要注意哪些 浏览:152
外国电影男的去家里绑架女的和孩子 浏览:100
雷沃524液压提升器 浏览:666
商砼搅拌站废水处理 浏览:634
我的世界蒸馏水怎么做视频教程 浏览:848
柴油油泵上的滤芯在哪里 浏览:678
179神鼠电影 浏览:330
中山纯水设备电话多少 浏览:91
男孩裸体电影 浏览:863
国产老电影《主流 浏览:896
在功放前面加个解码器对音质有提升吗 浏览:643
怎么样去除电水壶里的水垢 浏览:958
污水mbr平板膜怎么维护 浏览:541
污水处理格栅的长宽是多少 浏览:269
氮气进超纯水设备怎么接管道 浏览:954
韩国 小电影 浏览:846
日韩中文字幕在线免费 浏览:853
武汉新明纤维树脂制品有限公 浏览:228
狄仁杰杀凤凰完整版 浏览:94