java用户登录拦截判断

用maven生成了appfuse的webssh项目里面东西比较多调查了下做个记录。

web应用中,我们经常使用filter机制来确定外部请求的用户是否登录,角色是否合法等。Spring提供了
一个DelegatingFilterProxy机制来完成filter的部分功能。通过例子做一个简单对比。   二者看起来
没有什么太大的区别,在spring中,filter被纳入了bean 管理机制。

1.servlet filter
* LoginFilter .java 

package servlet.filter;
import javax.servlet.*;
import javax.servlet.http.*;
import java.io.*;
public class LoginFilter implements Filter {
protected FilterConfig filterConfig;
public void init(FilterConfig filterConfig) throws ServletException {
this.filterConfig = filterConfig;
}
public void destroy() {
this.filterConfig = null;
}
public void doFilter(ServletRequest request, ServletResponse response,
FilterChain chain) throws java.io.IOException, ServletException {
HttpServletRequest req = (HttpServletRequest) request;
HttpServletResponse res = (HttpServletResponse) response;
String username = req.getParameter("j_username");
System.out.println("this is in servlet filter");
chain.doFilter(request, response);
}
}
*web.xml
<filter>
<filter-name>simplelogin</filter-name>
<filter-class>servlet.filter.LoginFilter</filter-class>
<init-param>
<param-name>hello</param-name>
<param-value>hello filter</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>simplelogin</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
2. Spring filter 
*LoginFilter.java
package filter;
import java.io.IOException;
import java.security.Principal;
import javax.servlet.*;
import javax.servlet.http.*;
import org.apache.commons.logging.*;
public class LoginFilter implements Filter {
private FilterConfig filterConfig = null;
Log log = LogFactory.getLog(LoginFilter.class);
public void doFilter(ServletRequest req, ServletResponse res,FilterChain chain) throws IOException, ServletException {
HttpServletRequest request = (HttpServletRequest) req;
Principal principal=request.getUserPrincipal();
HttpServletResponse response=(HttpServletResponse)res; 
log.info("filter user name:"+request.getParameter("j_username")+":"+principal.toString());
log.info("filter password :"+request.getParameter("j_password"));
chain.doFilter(req,res);
}
public void init(FilterConfig config) throws ServletException {
this.filterConfig = config;
}
public void destroy() {
filterConfig = null;
}
}
*
web.xml
<filter>
<description>LoginFilter</description>
<display-name> LoginFilter</display-name>
<filter-name>LoginFilter</filter-name>
<filter-class>org.springframework.web.filter.DelegatingFilterProxy</filter-class>
<init-param>
<description>
</description>
<param-name>targetBeanName</param-name>
<param-value>loginFilter</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>LoginFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
*spring context config
<bean id="loginFilter" class="filter.LoginFilter" />
3.struts2 的拦截器

<interceptors>
	<!-- 登录验证拦截器 -->
	<interceptor name="authority"
		class="com.bolo.examples.common.interceptor.AuthorityInterceptor" />
	<!-- 自定义拦截器栈 -->
	<interceptor-stack name="boloStack">
		<!-- 将登录验证拦截器加入默认的拦截器栈中 -->
		<interceptor-ref name="authority">
			<param name="excludeMethods">welcome,login</param>
		</interceptor-ref>
		<interceptor-ref name="defaultStack"></interceptor-ref>
	</interceptor-stack>
</interceptors>
<!-- 将自定义拦截器栈设置默认的全局拦截器 -->
<default-interceptor-ref name="boloStack" />
<!-- 全局跳转页面 -->
<global-results>
	<result name="login">/jump.jsp</result>
</global-results>

Interceptor类

/**
 * 登录验证拦截器
 * @author 菠萝大象
 */
public class AuthorityInterceptor extends MethodFilterInterceptor{

	@Override
	protected String doIntercept(ActionInvocation actioninvocation) throws Exception {
		Object user = ServletActionContext.getRequest().getSession().getAttribute("user");
		if(user != null){
			return actioninvocation.invoke(); //递归调用拦截器
		}else{
			return Action.LOGIN; //返回到登录页面
		}
	}
}





  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
自己的状态改为 `THINKING`,并打印一些信息,包括哲学家的编号和放下的叉子的编号。接下来,它调用 `test` 函数,以测试是否有其他哲学家可以进餐在 Java 中,可以通过实现拦截器(Interceptor)来判断用户是否过期。具体实现步骤如下: 1. 创建一个拦截器类并实现 HandlerInterceptor 接口。 2. 在 preHandle 方法中获取当前求的 HttpSession。最后,它释放信号量 `mutex`,表示它已经放下了叉子。 ```c 对象,并从中获取用户信息。 3. 判断用户信息是否存在且是否过期,如果过期则跳转到登录 void put_away_forks(int i) { sem_wait(&mutex); state[i] = THINKING; printf("Philosopher页面,否则放行求。 以下是一个简单的拦截器示例代码: ``` public class UserInterceptor implements Handler %d puts fork %d and %d down\n", i+1, LEFT+1, i+1); printf("PhilosopherInterceptor { @Override public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception { HttpSession session = request.getSession(); User user = (User) session.getAttribute("user"); if (user == null || user.isExpired()) { response.sendRedirect %d is thinking\n", i+1); test(LEFT); test(RIGHT); sem_post(&mutex); } ("/login"); return false; } return true; } } ``` 在上面的代码中,User 类表示用户 ``` 11. `philosopher` 函数用于模拟每个哲学家的行为。在这个函数中,哲信息,isExpired() 方法用于判断用户是否过期。在 preHandle 方法中,首先获取 HttpSession 对象,然后学家会不停地重复拿起叉子、进餐和放下叉子的过程。 ```c 从中获取用户信息。如果用户信息不存在或已过期,则重定向到登录页面,并返回 false,拦截器会 void *philosopher(void *arg) { while (1) { int *i = arg; grab_forks(*i); 终止求的继续执行。如果用户信息存在且未过期,则放行求,返回 true。最后,需要将拦截器注册到 Spring MVC 中,以便它能够拦截求。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值