java登录拦截器

1.定义拦截器实现接口HttpServletRequest

public class LoginInterceptor implements HandlerInterceptor {

	@Override
	public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler)
			throws Exception {
		System.out.println("进入登录拦截器");
		//放行登录操作
		String uri= request.getRequestURI();
		if(uri.indexOf("login")>=0){
			return true;
		}
		//获取session对象
		HttpSession session = request.getSession();
		//登录成功是的User
		Object user = session.getAttribute("user");
		if(user!=null){
			return true;
		}else{
			request.getRequestDispatcher("/jsp/login.jsp").forward(request, response);;
			return false;
		}
	}

	@Override
	public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler,
			ModelAndView modelAndView) throws Exception {
		// TODO Auto-generated method stub

	}

	@Override
	public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex)
			throws Exception {
		// TODO Auto-generated method stub

	}

}

2.在SpringMvc.xml上配置拦截器

<!-- 配置登录拦截器 -->
	<mvc:interceptors>
		<mvc:interceptor>
			<mvc:mapping path="/**"/>
			<bean class="com.yh.interceptor.LoginInterceptor"></bean>
		</mvc:interceptor>	
	</mvc:interceptors>

3.编写登录的controller方法

@Controller
public class LoginController {
	@Autowired
	private UserService userService;
	@RequestMapping("/login")
	public String loginController(TbUser user, HttpSession session,Model model){
		//获取登录页面的User
		TbUser userLogin =	userService.findUserByName(user);
		//将登录页面的User放入session中
		if(userLogin!=null){
			session.setAttribute("user", userLogin);
			return "redirect:/item/all.action";
		}else{
			model.addAttribute("user", user);
			return "/login";
		}
		
	}
	//退出
	@RequestMapping("/logout")
	@ResponseBody
	public void logoutController(HttpSession session){
		session.invalidate();
		
	}
}
//这里通过注解的方式将controller类交给Spring管理还有属性的注入以及页面的跳转

4.编写jsp即可

<form action="${pageContext.request.contextPath}/login" method="post">
	用户名:<input type="text" name="username" value="${user.userName }"><br>
	密码:<input type="password" name="address"><br>
	<input type="submit" value="提交" >
</form>

注意在写拦截器时一定不能阻碍登录拦截器的进入

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
Java 中使用 JWT 实现登录拦截器的步骤如下: 1. 首先,你需要引入所需的依赖。可以使用 Maven 或 Gradle 来管理依赖项,以下是使用 Maven 的示例: ```xml <dependency> <groupId>io.jsonwebtoken</groupId> <artifactId>jjwt-api</artifactId> <version>0.11.2</version> </dependency> <dependency> <groupId>io.jsonwebtoken</groupId> <artifactId>jjwt-impl</artifactId> <version>0.11.2</version> <scope>runtime</scope> </dependency> <dependency> <groupId>io.jsonwebtoken</groupId> <artifactId>jjwt-jackson</artifactId> <version>0.11.2</version> <scope>runtime</scope> </dependency> ``` 2. 创建一个 JWTUtil 工具类,用于生成和解析 JWT。可以使用 jjwt 库来实现这些功能。以下是一个示例: ```java import io.jsonwebtoken.Claims; import io.jsonwebtoken.Jwts; import io.jsonwebtoken.SignatureAlgorithm; import java.util.Date; public class JWTUtil { private static final long EXPIRATION_TIME = 864_000_000; // 10 days private static final String SECRET_KEY = "yourSecretKey"; public static String generateToken(String username) { Date now = new Date(); Date expiryDate = new Date(now.getTime() + EXPIRATION_TIME); return Jwts.builder() .setSubject(username) .setIssuedAt(now) .setExpiration(expiryDate) .signWith(SignatureAlgorithm.HS512, SECRET_KEY) .compact(); } public static String getUsernameFromToken(String token) { Claims claims = Jwts.parser() .setSigningKey(SECRET_KEY) .parseClaimsJws(token) .getBody(); return claims.getSubject(); } } ``` 3. 创建一个自定义的登录拦截器类,用于验证 JWT。可以实现 `HandlerInterceptor` 接口,并在 `preHandle()` 方法中进行登录验证。以下是一个示例: ```java import org.springframework.web.servlet.HandlerInterceptor; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; public class JwtInterceptor implements HandlerInterceptor { @Override public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception { String token = request.getHeader("Authorization"); if (token != null && token.startsWith("Bearer ")) { token = token.substring(7); String username = JWTUtil.getUsernameFromToken(token); // 进行用户验证逻辑 return true; // 放行请求 } response.setStatus(HttpServletResponse.SC_UNAUTHORIZED); return false; // 拦截请求 } } ``` 4. 在 Spring Boot 中配置拦截器。在你的配置类中,使用 `addInterceptors()` 方法将拦截器添加到应用程序中。以下是一个示例: ```java import org.springframework.context.annotation.Configuration; import org.springframework.web.servlet.config.annotation.InterceptorRegistry; import org.springframework.web.servlet.config.annotation.WebMvcConfigurer; @Configuration public class WebConfig implements WebMvcConfigurer { @Override public void addInterceptors(InterceptorRegistry registry) { registry.addInterceptor(new JwtInterceptor()) .addPathPatterns("/api/**") // 拦截指定路径的请求 .excludePathPatterns("/api/login"); // 排除登录接口 } } ``` 以上是使用 JWT 实现登录拦截器的基本步骤。你可以根据自己的实际需求进行相应的调整和扩展。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值