两周内免登录,显示上次访问时间,防止非法登录(4s内不操作)转到欢迎界面,登录检验码(图片)使用idea的详细代码
时间: 2024-10-22 21:24:37 浏览: 21
java操作cookie-实现两周内自动登录.doc
在Java中,实现这种功能通常涉及到Spring Security、Session管理和页面跳转。这里我会提供一个简化的示例,假设你已经设置了Spring Boot项目,并引入了Spring Security依赖。
首先,在`pom.xml`添加Spring Security依赖:
```xml
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-security</artifactId>
</dependency>
</dependencies>
```
然后,在`application.properties`配置文件里设置session超时时间和验证码相关属性:
```properties
# 设置会话过期时间为两周
spring.session.timeout=1209600
# 验证码相关配置
spring.security.web.authentication.image-captcha.enabled=true
captcha:location=classpath:/images/captchas/
```
接着,创建一个自定义的`AuthenticationEntryPoint`,用于处理未授权访问:
```java
@Component
public class CustomAuthenticationEntryPoint implements AuthenticationEntryPoint {
@Override
public void commence(HttpServletRequest request, HttpServletResponse response, AuthenticationException authException)
throws IOException, ServletException {
if (authException instanceof BadCredentialsException) {
// 如果是非法登录尝试,显示验证码并跳转到登录界面
sendRedirect(request, response, "/login?showCaptcha=true");
} else {
// 其他异常直接返回登录界面
sendRedirect(request, response, "/login");
}
}
private void sendRedirect(HttpServletRequest request, HttpServletResponse response, String location) throws IOException {
response.sendRedirect(location);
}
}
```
在`SecurityConfig.java`中配置Spring Security过滤器和验证码支持:
```java
@Configuration
@EnableWebSecurity
public class SecurityConfig extends WebSecurityConfigurerAdapter {
@Autowired
public void configureGlobal(AuthenticationManagerBuilder auth) throws Exception {
// 添加其他身份验证逻辑...
}
@Bean
public CustomAuthenticationEntryPoint authenticationEntryPoint() {
return new CustomAuthenticationEntryPoint();
}
// 其他必要的配置...
}
```
最后,在登录页面处理验证码和登录验证:
```java
@Controller
@RequestMapping("/login")
public class LoginController {
@GetMapping
public String login(@RequestParam(required = false) Boolean showCaptcha, Model model) {
// 显示登录表单,如果需要显示验证码,则传递标志给视图
if (showCaptcha != null && showCaptcha) {
model.addAttribute("captcha", generateCaptchaImage());
}
return "login";
}
@PostMapping
public String authenticate(@RequestParam String username, @RequestParam String password, @RequestParam String captcha, Model model) {
// 这里检查用户名密码是否匹配以及验证码是否正确
// 如果验证成功,设置会话信息;失败则返回错误消息
}
// 生成验证码图片的方法
private byte[] generateCaptchaImage() {
// 使用Spring Security的CaptchaUtils生成图片
BufferedImage image = CaptchaGenerator.generateImage();
return ImageIO.toByteArray(image);
}
}
```
这只是一个基本的框架,实际应用中可能还需要考虑更多细节,如持久化验证码、错误处理等。记住,为了保护隐私和安全,不要在生产环境中明文存储用户的登录状态,而是应该使用加密的安全令牌(JWT或其他形式)。同时,为了提高用户体验,可以考虑使用第三方库如Apache Shiro来简化集成工作。
阅读全文