1.同域SSO案例

1.搭建springmvc框架

2.编写LoginController,login.jsp
LoginController:
1.获取用户名密码并验证,验证成功,将用户名写入Cookie(“username”,”xiaoming”),path为/,获取login.jsp传过来的回调地址,callbackurl,并重定向到callbackurl
2.验证失败,重新跳转到login.jsp

3.编写MianController1,main1.jsp主页
MianController:
1.获取Cookie信息,如果Cookie中包含usernema,并且等于xiaoming,用户已登录,直接跳转main.jsp

4.编写MianController2,main2.jsp主页
MianController:
1.获取Cookie信息,如果Cookie中包含usernema,并且等于xiaoming,用户已登录,直接跳转main.jsp
2.如果Cookie中没有此信息,表示用户需要登陆,跳转到login.jsp,并传参callbackurl为此控制器的url

5.案例
这里写图片描述
如上目录结构
1.User:

package com.tiglle.bean;

public class User {

    private String username;

    private String password;

    private String callbackurl;

    public String getUsername() {
        return username;
    }

    public void setUsername(String username) {
        this.username = username;
    }

    public String getPassword() {
        return password;
    }

    public void setPassword(String password) {
        this.password = password;
    }

    public String getCallbackurl() {
        return callbackurl;
    }

    public void setCallbackurl(String callbackurl) {
        this.callbackurl = callbackurl;
    }

    public User(String username, String password, String callbackurl) {
        super();
        this.username = username;
        this.password = password;
        this.callbackurl = callbackurl;
    }

    public User(String username, String password) {
        super();
        this.username = username;
        this.password = password;
    }

    public User() {
        super();
    }


}

2.LoginController:

package com.tiglle.controller;

import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;

import com.tiglle.bean.User;
import com.tiglle.service.UserService;
@Controller
public class LoginController {

    @Autowired
    private UserService userService;

    @RequestMapping("/login")
    public String login(HttpServletRequest request,HttpServletResponse response,User user){
        if(userService.checkLogin(user)){
            //写入cookie
            Cookie cookie = new Cookie("username",user.getUsername());
            cookie.setMaxAge(300);
            cookie.setPath("/");
            response.addCookie(cookie);
            //重定向到callbackurl
            return "redirect:"+user.getCallbackurl();
        }
        return "login";
    }

}

3.UserService:

package com.tiglle.service;

import javax.servlet.http.Cookie;

import org.springframework.stereotype.Service;

import com.tiglle.bean.User;

@Service
public class UserService {

    private User user = new User("xiaoming","123456");

    public boolean checkLogin(User paramUser){
        if(paramUser.getUsername().equals(user.getUsername())&&paramUser.getPassword().equals(user.getPassword())){
            return true;
        }
        return false;
    }

    public boolean checkCookie(Cookie[] cookies){
        if(cookies!=null){
            for(Cookie cookie:cookies){
                if(cookie.getName().equals("username")&&cookie.getValue().equals("xiaoming")){
                    return true;
                }
            }
        }
        return false;
    }

}

5.MainController1:

package com.tiglle.server1;

import java.util.Map;

import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServletRequest;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;

import com.tiglle.service.UserService;

@Controller
public class MainController1 {

    @Autowired
    private UserService userService;

    @RequestMapping("/main1")
    public String main1(HttpServletRequest request,Map<String,String> map){
        Cookie[] cookies = request.getCookies();
        if(userService.checkCookie(cookies)){
            return "main1";
        }
        map.put("callbackurl", "/main1");
        return "login";
    }

}

6.MainController2:

package com.tiglle.server2;

import java.util.Map;

import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServletRequest;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;

import com.tiglle.service.UserService;
@Controller
public class MainController2 {

    @Autowired
    private UserService userService;

    @RequestMapping("/main2")
    public String main2(HttpServletRequest request,Map<String,String> map){
        Cookie[] cookies = request.getCookies();
        if(userService.checkCookie(cookies)){
            return "main2";
        }
        map.put("callbackurl", "/main2");
        return "login";
    }

}

7.login.jsp:

<%@ page language="java" contentType="text/html; charset=utf-8"
    pageEncoding="utf-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>登录页面</title>
</head>
<body>
    <center>
        <form action="login">
            用户名:<input type="text" name="username"/><br/>
            密 码:<input type="text" name="password"/><br/>
            <input type="hidden" name="callbackurl" value="${callbackurl }"/><br/>
            <input type="submit" value="登录"/><br/>
        </form>
    </center>
</body>
</html>

8.main1.jsp:

<%@ page language="java" contentType="text/html; charset=utf-8"
    pageEncoding="utf-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>主页1</title>
</head>
<body>
主页1
</body>
</html>

9.main2.jsp:

<%@ page language="java" contentType="text/html; charset=utf-8"
    pageEncoding="utf-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>主页2</title>
</head>
<body>
主页2
</body>
</html>
  1. index.jsp:
<%@ page language="java" contentType="text/html; charset=utf-8"
    pageEncoding="utf-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>首页</title>
</head>
<body>
<%
request.getRequestDispatcher("/WEB-INF/page/login.jsp").forward(request, response);
%>
</body>
</html>

此时,打开访问main1会出现登录页面,当登录成功,访问main2就直接进入主页面,无需登录,反之一样。

`@EnableOAuth2Sso` 是Spring Security OAuth项目中的一个注解,用于启用OAuth2的单点登录(Single Sign On,简称SSO)功能。该注解一般用在Spring Boot应用中,以便简化OAuth2 SSO的配置。在使用该注解时,通常需要在项目中添加相应的依赖来支持OAuth2 SSO的实现。 在Maven项目中,除了需要添加Spring Boot的自动配置依赖之外,还需要添加专门支持OAuth2的依赖库,例如`spring-security-oauth2-client`和`spring-security-oauth2-resource-server`。以下是一个可能的依赖配置示例: ```xml <dependencies> <!-- Spring Boot Starter Parent, 提供了项目的基础依赖 --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>你的Spring Boot版本</version> </dependency> <!-- Spring Boot Starter Web, 包含了构建web应用的依赖 --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <!-- Spring Security OAuth2 Client --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-security-oauth2-client</artifactId> </dependency> <!-- Spring Security OAuth2 Resource Server --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-security-oauth2-resource-server</artifactId> </dependency> <!-- 其他依赖... --> </dependencies> ``` 请确保将上述示例中的版本号替换为当前可用的版本,并根据实际情况添加其他必要的依赖。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值