SpringMVC之安全性(三)Twitter登入

前面笔者已经说了,我们应用程序只是一个简单的例子,所以我们没有加入数据库的管理,只是简单在程序中限制用户的登入的名称和密码。这样做不是很好,最好还是用数据库,当然,实际商用系统当然要用到数据库了。为了弥补这个方面的不足,笔者双加入了Twitter的应用,也就是我们可以用Twitter的账号来登录了。

1.申请Twitter授权

在学习的一开始,笔者就已经说了,你的OS可以上国外的网站。当然还需要你有Twitter的账号。前面的一个章节,我们还学习了如何与Twitter对接,涉及到去Twitter网站设置的内容。这里也是一个,我们需要到Twitter网站上设置下面的属性。

2.控制层修改

1)        首先,我们需要在authentication的包下添加AuthenticatingSignInAdapter类,用于登录授权的鉴定。

package masterSpringMVC6.authentication;

import org.springframework.security.authentication.UsernamePasswordAuthenticationToken;
import org.springframework.security.core.context.SecurityContextHolder;
import org.springframework.social.connect.Connection;
import org.springframework.social.connect.UserProfile;
import org.springframework.social.connect.web.SignInAdapter;
import org.springframework.stereotype.Component;
import org.springframework.web.context.request.NativeWebRequest;

/**
 * 连接到Twitter,登录
 * Created by OwenWilliam on 2016/5/22.
 */
@Component
public class AuthenticatingSignInAdapter implements SignInAdapter {

    public static void authenticate(Connection<?> connection)
    {

        //获取用户的提供信息
        UserProfile userProfile = connection.fetchUserProfile();
        String username = userProfile.getUsername();
        UsernamePasswordAuthenticationToken authentication = new UsernamePasswordAuthenticationToken(username, null, null);
        SecurityContextHolder.getContext().setAuthentication(authentication);
        System.out.println("====:" +String.format("User %s %s connected.",
                userProfile.getFirstName(), userProfile.getLastName()));
          }

    @Override
    public String signIn(String userId, Connection<?> connection, NativeWebRequest request) {
        authenticate(connection);
        return null;
    }
}
2)   最后,我们要定义视图界面访问时,可以登录到Twitter的登录界面。一样的是在authentication的包下添加SignupController类。
package masterSpringMVC6.authentication;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.social.connect.Connection;
import org.springframework.social.connect.ConnectionFactory;
import org.springframework.social.connect.ConnectionFactoryLocator;
import org.springframework.social.connect.UsersConnectionRepository;
import org.springframework.social.connect.web.ProviderSignInAttempt;
import org.springframework.social.connect.web.ProviderSignInUtils;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.context.request.WebRequest;

/**
 * 通过Twitter来登录
 * Created by OwenWilliam on 2016/5/22.
 */
@Controller
public class SignupController
{
    private final ProviderSignInUtils signInUtils;

    @Autowired
    public SignupController(ConnectionFactoryLocator connectionFactoryLocator, UsersConnectionRepository connectionRepository)
    {
        signInUtils = new ProviderSignInUtils(connectionFactoryLocator, connectionRepository);
    }

    /**
     * 显示Twitter的登录页面
     * @param request
     * @return
     */
    @RequestMapping(value = "/signup")
    public String singup(WebRequest request)
    {
        Connection<?> connection = signInUtils.getConnectionFromSession(request);

        //如果没有连接,那就连接吧
        if (connection != null)
        {
            AuthenticatingSignInAdapter.authenticate(connection);
            signInUtils.doPostSignUp(connection.getDisplayName(), request);
        }

        return "redirect:/profile";
    }
}

3.视图修改

我们只需要在login.html的页面下添加下面的代码就行了。

<form th:action="@{/signin/twitter}" method="POST" class="center">
                <div class="row">
                    <button class="btn indigo" name="twitterSignin" type="submit">Connect with Twitter
                        <i class="mdi-social-group-add left"></i>
                    </button>
                </div>
            </form>

最后,我们视图的显示应该是下面你所看到的。

4.总结

这一节我们添加了可以使用Twitter登录的按钮,同时也是为个按键添加了现在的功能。最后,如果我们点击Twitter,那么我们将看到下面的页面。

源码下载:[email protected]:owenwilliam/masterSpringMVC6.git

时间: 2024-10-14 18:42:27

SpringMVC之安全性(三)Twitter登入的相关文章

springmvc shiro整合cas单点登入

shiro cas分为登入跟登出 maven依赖: <dependency> <groupId>org.apache.shiro</groupId> <artifactId>shiro-core</artifactId> <version>1.3.2</version> </dependency> <dependency> <groupId>org.apache.shiro</gr

Day1:编写登入接口

输入用户名密码: 登入成功后提示欢迎信息: 三次登入失败后锁定. 编写如下: # Author: Ewan Wangfor i in range(3): username = input("username:") password = input("password:") if username =="Wang"and password =="123": print("Welcome to the new world

Asp.Net Identity学习笔记+MVC5默认项目解析_第三方登入&授权总结

Identity学习笔记 Asp.Net Identity学习笔记+MVC5默认项目解析_基础用法 Asp.Net Identity学习笔记+MVC5默认项目解析_授权&Claim Asp.Net Identity学习笔记+MVC5默认项目解析_第三方登入&授权总结 Identity学习笔记第三方登入配置登入案例登入技术总结本地,已登入本地,未登入第三方登入 第三方登入 本文介绍Identity的第三方登入技术.到目前为止只介绍了CookieAuthentication这种授权方式,即浏览

【转】扫描二维码登入安全吗?

转载自https://abcdabcd987.com/qrcode-login/ 昨天在知乎上看到了一个问题微信淘宝设计扫码登录的理由是什么,牺牲人性化来加强安全性?,本以为这是一个送分题,可是点开一看,竟然我仰慕的高票答主回答并没有给出我期望的回答,还有许多我关注的大大们点了赞.再一看,下面一排都在无脑喷阿里和腾讯,一点都没有认真答题的意思,气得我一个个点了反对+没有帮助.终于看到了一个@陈裕皓 写的正常的答案,几乎感动得我热泪盈眶.其实我觉得他基本上把我能说的话都说了,不过我还是看热闹不嫌事

配置路由器/交换机的Telnet登入

[实验名称] 在路由器上配置Telnet. [实验目的] 掌握如何在路由器上配置 Telnet,以实现路由器的远程登录访问. [背景描述] 路由器用于连接多个子网时,通常放置位置都相距较远,察看和修改配置都比较麻烦, 此时如果可以远程登录到路由器上进行操作,将能够大大降低管理员的工作量. [需求分析] 需要掌握如何配置路由器的密码,如何配置 Telnet 服务,以及如何通过 Telnet 远程登录 路由器进行操作的方法. [实验设备] 路由器(带串口)     2台 V.35 DCE/DTE 线

javaweb 基于java Servlet登入 简单入门案例

项目流程 第一步:创建一个java webproject第二步:创建三个界面,1,login.jsp 2 success.jsp 3 fail.jsp第三步:更改新建界面编码格式,utf-8 默然编码格式会中文乱码.第四步:把当前新建项目添加到tomcat服务器,并启动服务器,查看界面效果第五步:浏览器访问http://127.0.0.1:8080/HelloServlet/login.jsp 127.0.0.1 本地ip 8080端口号,tomcat默认端口号 后面就是项目名称加指定界面名称界

Xamarin.iOS 的 Google 登入

在 Xamarin.iOS 開發中,使用Google 帳號進行登入,十分簡單.只要引入 Xamarin 為 Google Single-SignIn 開發的 Component 即可. 首先在專案的 Components 目錄下引入「Google Sign-In for iOS」 然後只要幾行code就可以完成Google Sin-In 的工作.真正的問題在Server端的設置. 首先到 https://developers.google.com/mobile/add 這邊增加 iOS App給

[会员登入] 透过 E-Mail进行身份认证、启用会员权利

[會員登入] 透過 E-Mail進行身份認證.啟用會員權利 这个问题是在论坛上看见的 其实,遇见问题的时候,我会建议初学者先想一下「流程」 您想怎么作?需要哪些步骤? 一旦「流程」清楚了 您是哪一步骤不会?.....大家可以给您帮助. 哪一段程序写不出来?找不到?.....也比较好解决. 直接拆解人家写好的范例,未必有帮助. 就跟 "写作文"一样, 拿到题目以后,你不去「想」,只参考人家的范例.现成的作品..... 最后写出来的东西,也就是人家的东西了(因为你被制约了,脑子被刚刚看的文

基于文件存储的用户登入

基于文件存储的用户登入(用户登入时三次输入错误的用户名和密码锁定账户) 1 #/usr/bin/env python 2 # -*- coding:utf-8 -*- 3 # Author:ylw 4 5 f1 = open('userdb','r') # 打开文件userdb 并读取里面的内同容 6 data = f1.read() # 把f1 变量为 data可以读取f1里所有内容 7 f1.close() # 关闭文档 8 user_str_list = data.split(\n) #变