java写一个单点登录
时间: 2023-05-28 22:04:20 浏览: 48
单点登录(Single Sign-On,SSO)是指用户只需要登录一次,就可以在多个相互信任的应用系统中访问资源的一种身份认证技术。下面是一个简单的Java实现单点登录的示例。
1. 创建一个登录页面,用于输入用户名和密码并提交表单。
```html
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>登录页面</title>
</head>
<body>
<form action="login" method="post">
<p>用户名:<input type="text" name="username"></p>
<p>密码:<input type="password" name="password"></p>
<p><input type="submit" value="登录"></p>
</form>
</body>
</html>
```
2. 创建一个Servlet用于处理登录请求。
```java
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
@WebServlet("/login")
public class LoginServlet extends HttpServlet {
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
String username = request.getParameter("username");
String password = request.getParameter("password");
// 检查用户名和密码是否正确
if ("admin".equals(username) && "123456".equals(password)) {
// 登录成功,将用户信息保存到Session中
request.getSession().setAttribute("user", username);
response.sendRedirect("home");
} else {
// 登录失败,返回错误信息
request.setAttribute("error", "用户名或密码错误");
request.getRequestDispatcher("login.jsp").forward(request, response);
}
}
}
```
3. 创建一个首页,用户登录成功后跳转到此页面。
```html
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>首页</title>
</head>
<body>
<h1>欢迎登录系统</h1>
<p>当前用户:${user}</p>
</body>
</html>
```
4. 创建一个过滤器,用于检查用户是否已经登录。如果用户已经登录,则直接放行,否则跳转到登录页面。
```java
import javax.servlet.*;
import javax.servlet.annotation.WebFilter;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import java.io.IOException;
@WebFilter("/*")
public class LoginFilter implements Filter {
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
HttpServletRequest req = (HttpServletRequest) request;
HttpServletResponse res = (HttpServletResponse) response;
HttpSession session = req.getSession(false);
String uri = req.getRequestURI();
boolean isLoginPage = uri.endsWith("login.jsp") || uri.endsWith("login");
boolean isLoggedIn = (session != null && session.getAttribute("user") != null);
boolean isStaticResource = uri.contains("/css/") || uri.contains("/js/") || uri.contains("/images/");
if (isLoggedIn || isLoginPage || isStaticResource) {
// 已经登录或者访问的是登录页面或者静态资源,直接放行
chain.doFilter(request, response);
} else {
// 没有登录,跳转到登录页面
res.sendRedirect("login.jsp");
}
}
}
```
通过以上的实现,用户只需要登录一次,就可以在多个相互信任的应用系统中访问资源。当用户访问需要身份认证的资源时,系统会自动检查用户的登录状态,如果已经登录,则直接访问资源,否则跳转到登录页面进行身份认证。