使用Java Servlet,JSP标签和Stormpath快速构建Java Web App

建筑物身份管理,包括身份验证和授权? 尝试Stormpath! 我们的REST API和强大的Java SDK支持可以消除您的安全风险,并且可以在几分钟内实现。 注册 ,再也不会建立auth了!

我们刚刚发布了Java SDK的主要升级版本,现在包括Java Webapp(Servlet 3.0+)支持以及大量用户自动化功能。 只需将我们的Servlet插件放入您的Java Web应用程序中,然后开始繁荣—无需编写代码即可进行即时用户管理。

这篇文章是一个快速教程,向您展示如何快速建立具有完整的身份验证和用户管理功能以及使用Stormpath的用户界面的Java Web应用程序。

如果您已经构建了Java Web应用程序,那么您将了解建立适当的身份验证和用户管理所涉及的时间痛苦

即使您使用了Apache ShiroSpring Security这样的出色框架,仍然有很多无聊的UI工作和高风险的后端工作。

至少,除了处理每个视图的控制器,注销处理程序等之外,您还必须构建用于注册,登录和忘记密码的UI屏幕。

然后,您必须担心安全性问题,例如密码哈希方案,随着计算的改进而更新哈希算法,跨站点请求伪造(CSRF)保护,跨站点脚本(xss)攻击等等。

Stormpath可以连接到典型的Java Web应用程序,并为开发人员提供了开箱即用的所有身份验证,授权和用户安全性,因此您可以继续进行真正关心的应用程序。 实际上,您无需编写任何代码即可获得完整的用户界面 太棒了

到本教程完成时(不到15分钟),您将拥有一个功能全面的Java Web应用程序。 我们将重点介绍具有大量用户自动化功能的Stormpath-Servlet插件。 您只需将插件放到Web应用程序中便可以蓬勃发展–无需编写代码即可进行即时用户管理。

您将在此Java Servlet教程中构建什么:

您将使用标准的Servlet 3+和JSP API构建一个简单的Java Web应用程序。 完成后,您将能够:

  • 使用电子邮件和密码创建(注册)新的用户帐户
  • 验证新用户帐户的注册电子邮件地址
  • 使用电子邮件和密码登录(认证)您的新帐户
  • 登录后显示可自定义的用户帐户仪表板,仅已登录的用户可以访问
  • 将尝试访问仪表板的未经身份验证的用户重定向到登录页面
  • 允许登录用户注销
  • 允许用户通过基于电子邮件的忘记密码工作流程重置密码

这是最好的部分–对于上述所有方面, 您无需编写任何代码 -只需进行一些配置即可!

但是,仅出于娱乐目的,我们将编写一个简单的欢迎页面和一个用户帐户仪表板页面,这些页面很可能存在于实际应用程序中。

此示例的所有代码都在Stormpath Java SDK项目中

听起来不错? 大! 让我们开始吧!

您需要什么:Stormpath,JDK,Maven或Gradle

  • 约15分钟的时间
  • 与Stormpath通信的Stormpath API密钥
  • JDK 1.6或更高版本
  • Maven 3.0+或Gradle 2.2+

如何完成本指南

如果您已经设置了Stormpath API密钥并使用Maven / Gradle构建了项目,则可以从头开始并完成每个步骤,也可以跳过基本的设置步骤

从头开始教程

如果您想从头开始,则需要首先获得一个Stormpath API密钥

然后,您将需要根据自己的喜好使用MavenGradle进行构建

下载Stormpath API密钥

与Stormpath的所有通信都必须通过API密钥进行身份验证。

  1. 如果尚未注册,请免费注册Stormpath 。 您会收到一封验证电子邮件。
  2. 点击验证电子邮件中的链接。
  3. 使用您在注册期间使用的电子邮件地址和密码登录到Stormpath管理控制台
  4. 点击信息中心右上角的Manage API Keys链接。
  5. 在“ 安全凭据”下 ,单击“ 创建API密钥” 。这将生成您的API密钥并将其作为apiKey.properties文件下载到您的计算机上。
  6. 将文件保存在主目录中的以下位置:
  • Unix,Linux和Mac OS上的~/.stormpath/apiKey.properties
  • Windows上的C:\Users\YOUR_USERNAME\.stormpath\apiKey.properties
  1. 更改文件权限以确保只有您可以读取此文件。 例如:
    chmod go-rwx ~/.stormpath/apiKey.properties
  2. 为了安全起见,您可能还想防止自己不小心写入/修改文件:
    chmod u-w ~/.stormpath/apiKey.properties

在Windows上,您可以类似地设置API密钥文件权限


使用Maven构建项目

选择您要用于项目的目录。 在该目录中,创建以下maven pom.xml文件:
pom.xml

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
    <modelVersion>4.0.0</modelVersion>
 
    <groupId>com.stormpath.samples</groupId>
    <artifactId>stormpath-webapp-tutorial</artifactId>
    <version>0.1.0</version>
    <packaging>war</packaging>
 
    <dependencies>
        <dependency>
            <groupId>com.stormpath.sdk</groupId>
            <artifactId>stormpath-servlet-plugin</artifactId>
            <version>1.0.RC9.2</version>
        </dependency>
        <dependency>
            <groupId>javax.servlet</groupId>
            <artifactId>javax.servlet-api</artifactId>
            <version>3.1.0</version>
            <scope>provided</scope>
        </dependency>
        <dependency>
            <groupId>javax.servlet</groupId>
            <artifactId>jstl</artifactId>
            <version>1.2</version>
        </dependency>
        <dependency>
            <groupId>ch.qos.logback</groupId>
            <artifactId>logback-classic</artifactId>
            <version>1.1.7</version>
            <scope>runtime</scope>
        </dependency>
    </dependencies>
 
    <build>
        <plugins>
            <plugin>
                <groupId>org.apache.tomcat.maven</groupId>
                <artifactId>tomcat7-maven-plugin</artifactId>
                <version>2.2</version>
                <configuration>
                    <path>/</path>
                </configuration>
            </plugin>
        </plugins>
    </build>
 
</project>


使用Gradle构建项目

选择您要用于项目的目录。 在该目录中,创建以下build.gradle文件:
build.gradle

buildscript {
    repositories {
        jcenter()
    }
 
    dependencies {
        classpath 'com.bmuschko:gradle-tomcat-plugin:2.0'
    }
}
 
apply plugin: 'java'
apply plugin: 'war'
apply plugin: 'com.bmuschko.tomcat'
 
sourceCompatibility = 1.6
version = '0.1.0'
war.baseName = 'stormpath-webapp-tutorial'
 
repositories {
    mavenLocal()
    mavenCentral()
}
 
dependencies {
    compile group: 'com.stormpath.sdk', name: 'stormpath-servlet-plugin', version: '1.0.RC9.2'
    compile group: 'javax.servlet', name: 'jstl', version: '1.2'
    providedCompile group: 'javax.servlet', name: 'javax.servlet-api', version: '3.1.0'
    runtime group: 'ch.qos.logback', name: 'logback-classic', version: '1.1.7'
 
    def tomcatVersion = '7.0.57'
    tomcat "org.apache.tomcat.embed:tomcat-embed-core:${tomcatVersion}",
            "org.apache.tomcat.embed:tomcat-embed-logging-juli:${tomcatVersion}"
    tomcat("org.apache.tomcat.embed:tomcat-embed-jasper:${tomcatVersion}") {
        exclude group: 'org.eclipse.jdt.core.compiler', module: 'ecj'
    }
}
 
tomcatRun.contextPath = '/'
tomcatRunWar.contextPath = '/'
 
task wrapper(type: Wrapper) {
    gradleVersion = '2.2.1'
}

跳过教程基础

将依赖项添加到您的Web应用程序(.war)项目中:

Maven:

<dependency>
    <groupId>com.stormpath.sdk</groupId>
    <artifactId>stormpath-servlet-plugin</artifactId>
    <version>1.0.RC9.2</version>
</dependency>

摇篮:

dependencies {
  compile 'com.stormpath.sdk:stormpath-servlet-plugin:1.0.RC9.2'
}

构建应用程序的目录结构

我们需要在各个目录中创建一些文件。 确保项目目录下存在以下目录结构:

-- src/
 |-- main/
   |-- java/
   |   |-- tutorial/
   |-- webapp
     |-- WEB-INF/
       |-- jsp/
       |-- tags/

例如,在* nix操作系统上:

mkdir -p src/main/java/tutorial
mkdir -p src/main/webapp/WEB-INF/jsp
mkdir -p src/main/webapp/WEB-INF/tags

使用JSP标签为您的应用创建页面模板

我们可能希望我们的Web应用程序页面具有相同的外观。 我们可以使用页面模板轻松地做到这一点。 而且,由于JSP 2.0通过JSP标签自动支持页面模板,因此无需引入其他模板库。 让我们创建一个包含以下内容的新模板标签文件:
src/main/webapp/WEB-INF/tags/page.tag

<%@tag description="Default Page template" pageEncoding="UTF-8"%>
<%@taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
<%@taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %>
<%@attribute name="title" required="false" %>
 
<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1">
    <title>Stormpath Webapp Sample | <c:out value="${!empty title ? title : ''}"/></title>
    <link href="//maxcdn.bootstrapcdn.com/bootstrap/3.3.2/css/bootstrap.min.css" rel="stylesheet">
    <%-- <link href="${pageContext.request.contextPath}/assets/css/style.css" rel="stylesheet" --%>
    <!-- HTML5 shim and Respond.js for IE8 support of HTML5 elements and media queries -->
    <!-- WARNING: Respond.js doesn't work if you view the page via file:// -->
    <!--[if lt IE 9]>
    <script src="https://oss.maxcdn.com/html5shiv/3.7.2/html5shiv.min.js"></script>
    <script src="https://oss.maxcdn.com/respond/1.4.2/respond.min.js"></script>
    <![endif]-->
    <!-- jQuery (necessary for Bootstrap's JavaScript plugins) -->
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.2/jquery.min.js"></script>
    <script src="//maxcdn.bootstrapcdn.com/bootstrap/3.3.2/js/bootstrap.min.js"></script>
</head>
<body>
    <div class="container">
 
        <div class="header">
 
            <ul class="nav nav-pills pull-right">
                <c:set var="uri" value="${requestScope['javax.servlet.forward.request_uri']}"/>
                <li<c:if test="${fn:endsWith(uri,'/')}"> class="active"</c:if>><a href="${pageContext.request.contextPath}/">Home</a></li>
 
                <%-- Change upper right context menu depending on if the user is logged in or not: --%>
                <c:choose>
                    <c:when test="${!empty account}">
                        <li<c:if test="${fn:endsWith(uri,'dashboard')}"> class="active"</c:if>><a href="${pageContext.request.contextPath}/dashboard">Dashboard</a></li>
                        <li><a href="${pageContext.request.contextPath}/logout">Logout</a></li>
                    </c:when>
                    <c:otherwise>
                        <li<c:if test="${fn:endsWith(uri,'login')}"> class="active"</c:if>><a href="${pageContext.request.contextPath}/login">Login</a></li>
                    </c:otherwise>
                </c:choose>
            </ul>
 
            <h3 class="text-muted">Stormpath Webapp Sample</h3>
 
        </div>
 
        <jsp:doBody/>
 
    </div>
</body>
</html>

这只是扩展名为.tag而不是.jsp的标准JSP文件。 的 元素将被使用此模板的任何页面的页面内容替换。

写一个家庭控制器

出于安全原因,我们希望确保在请求期间绝对不能直接访问JSP文件本身。 相反,我们希望Controller处理请求,然后将JSP呈现给请求。 为此,我们将创建一个简单的“ Home”控制器,该控制器呈现内部home.jsp页面:
src/main/java/tutorial/HomeController.java:

package tutorial;
 
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
 
public class HomeController extends HttpServlet {
 
    public static final String VIEW_TEMPLATE_PATH = "/WEB-INF/jsp/home.jsp";
 
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        req.getRequestDispatcher(VIEW_TEMPLATE_PATH).forward(req, resp);
    }
}

src/main/webapp/WEB-INF/jsp/home.jsp:

<%@ page session="false"%>
<%@ page contentType="text/html;charset=UTF-8" pageEncoding="UTF-8" %>
<%@ taglib prefix="t" tagdir="/WEB-INF/tags" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
 
<t:page>
    <jsp:attribute name="title">Welcome!</jsp:attribute>
    <jsp:body>
        <div class="jumbotron" id="welcome">
 
            <h1>Welcome to the Stormpath Webapp Sample Application!</h1>
 
            <p class="lead">
                <br/>
                <br/>
                Welcome to this <i>gloriously simple</i>
                <a href="https://docs.stormpath.com/java/servlet-plugin/">Stormpath Java Webapp</a> sample application!
                <ul>
                    <li>First, take a look through this very basic site.</li>
                    <li>Then, check out this project's source code
                        <a href="https://github.com/stormpath/stormpath-sdk-java/examples/servlet">on GitHub</a>.</li>
                    <li>Lastly, integrate Stormpath into your own sites!</li>
                </ul>
            </p>
 
            <br/>
            <br/>
 
            <h2>What This Sample App Demonstrates</h2>
 
            <br/>
            <br/>
 
            <p>This simple application demonstrates how easy it is to register, login, and securely authenticate
                users on your website using the Stormpath Servlet Plugin.</p>
 
            <p>Not a Stormpath user yet? <a href="https://stormpath.com">Go signup now!</a></p>
 
            <br/>
            <br/>
 
            <p class="bigbutton"><a class="bigbutton btn btn-lg btn-danger"
                                    href="${pageContext.request.contextPath}/register" role="button">Register</a></p>
        </div>
    </jsp:body>
</t:page>

最后,我们需要添加一个web.xml文件,以告知servlet容器在访问Web应用程序的默认路径时调用我们的Home Controller:

src/main/webapp/WEB-INF/web.xml

<?xml version="1.0" encoding="UTF-8"?>
<web-app version="3.1"
         xmlns="http://xmlns.jcp.org/xml/ns/javaee"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd">
 
    <servlet>
        <servlet-name>HomeController</servlet-name>
        <servlet-class>tutorial.HomeController</servlet-class>
    </servlet>
    <servlet-mapping>
        <servlet-name>HomeController</servlet-name>
        <url-pattern>/</url-pattern>
    </servlet-mapping>
 
    <servlet-mapping>
        <servlet-name>default</servlet-name>
        <url-pattern>/assets/*</url-pattern>
    </servlet-mapping>
 
</web-app>

使用Maven或Gradle启动Webapp

您是否可以相信,在添加单个主页后,您将拥有一个具有完整用户管理功能的功能性Web应用程序?

不相信我吗? 试试吧!

使用您选择的构建工具,让我们启动Web应用程序。 例如:
Maven:

mvn tomcat7:run

摇篮:

gradle tomcatRun

打开浏览器,然后访问http://localhost:8080 。 您将在上方看到我们刚刚创建的主页:

家

太酷了! 现在,老实说,这并不令人兴奋。 那毕竟是应该发生的。 但是令人敬畏的功能-您一直在等待的部分-都是自动的东西。 例如,登录页面!

尝试Stormpath用户登录页面

单击页面右上方的“ Login按钮,或手动访问http://localhost:8080/login ,您将看到以下信息:

登录

那就对了! 内置了最佳实践跨站点请求伪造(CSRF)保护的登录页面, 您无需编写任何内容既然是真棒! 您可以使用完整的国际化(i18n)功能自定义以什么顺序显示哪些字段,以及根据需要定制整个外观。 这超出了本文的范围,但是如果需要,您可以稍后阅读有关自定义视图的信息

当然,它还不止这些–您可以获得各种各样的好东西,例如用户帐户注册,电子邮件验证和忘记密码自动操作,令牌身份验证等等!

向Stormpath注册新用户

现在,您必须先创建用户帐户,然后才能登录,然后继续并单击“创建帐户”链接,或手动访问http://localhost:8080/register页面,您将看到以下内容:

寄存器

继续并填写并提交表单-您将获得一个新的用户帐户,可用于立即登录。

验证用户电子邮件地址

现在,如何进行电子邮件验证? 许多Web应用程序都希望确保新注册的用户必须先验证其电子邮件地址,然后才能登录该应用程序。 这有助于确保:

  • 电子邮件地址不能被不拥有电子邮件地址的人滥用
  • 应用程序可以根据需要与用户进行通信
  • 注册过程是由人类完成的(而不是执行自动注册的“机器人”,它可能会用于恶意目的)。

这也涵盖了! 您只需要按照文档中所述启用电子邮件验证即可。 由于这是一个简短的教程,我们将继续进行,但是如果您愿意,可以尝试将其打开。

注销您的用户

如果您仍然登录,请单击右上方的logout按钮。 这将访问/logout ,它将自动注销您,然后默认情况下将您重定向回Web应用程序的上下文根页面( / )(您可以稍后自定义下一个URI)。

我们还将对Web应用程序进行另一项更改,因此请继续并按CTRL-C关闭该应用程序。

为忘记密码,更改密码等实施视图

该插件还支持其他开箱即用的视图,您可以在文档中阅读这些视图。 但是,在结束本教程之前,我们想向您展示另外一件事:访问控制。

使用Stormpath实施访问控制(授权)

Stormpath Java Webapp插件还具有根据URI路径实施访问控制的功能。 例如你
可以确保只有经过身份验证的用户才能访问您应用程序中的/account URI。 或者那也许仅仅是 admin组中的帐户可以访问/admin URI。

为了说明这一点,我们将创建一个/dashboard视图,只有经过身份验证的用户才能看到。 这代表一个常见的“登录页面”,登录后可能立即显示用户。

让我们创建一个“仪表板”控制器:

src/main/java/tutorial/DashboardController.java

package tutorial;
 
import com.stormpath.sdk.account.Account;
import com.stormpath.sdk.directory.CustomData;
import com.stormpath.sdk.lang.Strings;
import com.stormpath.sdk.servlet.account.AccountResolver;
 
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
 
public class DashboardController extends HttpServlet {
 
    private static final String VIEW_TEMPLATE_PATH = "/WEB-INF/jsp/dashboard.jsp";
 
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
 
        String birthday = "";
        String color = "";
 
        Account account = AccountResolver.INSTANCE.getAccount(req);
        if (account != null) {
            CustomData data = account.getCustomData();
            birthday = (String)data.get("birthday");
            color = (String)data.get("color");
        }
 
        req.setAttribute("birthday", birthday);
        req.setAttribute("color", color);
        req.getRequestDispatcher(VIEW_TEMPLATE_PATH).forward(req, resp);
    }
 
    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
 
        String birthday = req.getParameter("birthday");
        String color = req.getParameter("color");
 
        //get the currently-logged-in account:
        Account account = AccountResolver.INSTANCE.getAccount(req);
        if (account != null) {
 
            CustomData data = account.getCustomData();
 
            if (Strings.hasText(birthday)) {
                data.put("birthday", birthday);
            } else {
                data.remove("birthday");
            }
 
            if (Strings.hasText(color)) {
                data.put("color", color);
            } else {
                data.remove("color");
            }
 
            data.save();
        }
 
        req.setAttribute("birthday", birthday);
        req.setAttribute("color", color);
        req.getRequestDispatcher(VIEW_TEMPLATE_PATH).forward(req, resp);
    }
}

DashboardController展示了一个非常好的Stormpath功能:可以将您自己的自定义数据直接“附加”到Stormpath REST资源,例如用户帐户的生日或喜欢的颜色。

让我们创建将由控制器渲染的视图文件:

src/main/webapp/WEB-INF/jsp/dashboard.jsp

<%@ page session="false"%>
<%@ page contentType="text/html;charset=UTF-8" pageEncoding="UTF-8" %>
<%@ taglib prefix="t" tagdir="/WEB-INF/tags" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
 
<t:page>
    <jsp:attribute name="title">Dashboard</jsp:attribute>
    <jsp:body>
        <div class="dashboard">
            <div class="row">
                <div class="col-lg-12">
                    <div class="jumbotron">
                        <h1>Dashboard</h1>
 
                        <br/>
                        <br/>
 
                        <p>Welcome to your user dashboard!</p>
 
                        <p>This page displays some of your account information and also allows you to change custom
                            data.</p>
 
                        <p>If you click the Logout link in the navbar at the top of this page, you'll be logged out
                            of your account and redirected back to the main page of this site.</p>
                        <br/>
                        <br/>
 
                        <h2>Your Account Custom Data</h2>
                        <br/>
                        <br/>
 
                        <p>Your Email: <span class="data">${account.email}</span></p>
 
                        <c:set var="noBirthday" value="You haven't entered a birthday yet!"/>
                        <p>Your Birthday: <span class="data">${!empty account.customData['birthday'] ? account.customData['birthday'] : noBirthday}</span></p>
 
                        <c:set var="noColor" value="You haven't entered a color yet!"/>
                        <p>Your Favorite Color: <span class="data">${!empty account.customData['color'] ? account.customData['color'] : noColor}</span></p>
 
                        <br/>
                        <br/>
 
                        <p>Stormpath allows you to store up to 10MB of custom user data on
                            each user account. Data can be anything (in JSON format). The above
                            example shows two custom fields (<code>birthday</code> and
                            <code>color</code>), but you can add whatever fields you'd like.</p>
 
                        <p>You can also store complicated nested JSON documents!</p>
                        <br/>
                        <br/>
 
                        <h2>Update Custom Data</h2>
                        <br/>
                        <br/>
 
                        <p>If you enter values below, we'll send and store these
                            values with your user account on Stormpath.</p>
 
                        <p>Please note, we are not doing any validation in this simple
                            example -- in a real world scenario, you'd want to check user input on the server side!</p>
                        <br/>
                        <br/>
 
                        <form method="post" class="bs-example form-horizontal" action="${pageContext.request.contextPath}/dashboard">
                            <div class="form-group">
                                <label for="birthday" class="col-lg-2 control-label">Birthday</label>
 
                                <div class="col-lg-4">
                                    <input type="text" class="form-control" id="birthday" name="birthday" placeholder="mm/dd/yyyy"
                                           value="${!empty account.customData['birthday'] ? account.customData['birthday'] : ''}">
                                </div>
                            </div>
                            <div class="form-group">
                                <label for="color" class="col-lg-2 control-label">Favorite Color</label>
                                <div class="col-lg-4">
                                    <input type="text" class="form-control" id="color" name="color" placeholder="color"
                                           value="${!empty account.customData['color'] ? account.customData['color'] : ''}">
                                </div>
                            </div>
                            <div class="form-group">
                                <div class="col-lg-10 col-lg-offset-2">
                                    <button type="submit" class="btn btn-primary">Update Custom Data</button>
                                </div>
                            </div>
                        </form>
                    </div>
                </div>
            </div>
        </div>
    </jsp:body>
</t:page>

而且,我们需要更新web.xml以将新视图告知Servlet容器。 web.xml现在应如下所示:

src/main/webapp/WEB-INF/web.xml

<?xml version="1.0" encoding="UTF-8"?>
<web-app version="3.1"
         xmlns="http://xmlns.jcp.org/xml/ns/javaee"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd">
 
    <servlet>
        <servlet-name>HomeController</servlet-name>
        <servlet-class>tutorial.HomeController</servlet-class>
    </servlet>
    <servlet-mapping>
        <servlet-name>HomeController</servlet-name>
        <url-pattern>/</url-pattern>
    </servlet-mapping>
    <servlet>
        <servlet-name>DashboardController</servlet-name>
        <servlet-class>tutorial.DashboardController</servlet-class>
    </servlet>
    <servlet-mapping>
        <servlet-name>DashboardController</servlet-name>
        <url-pattern>/dashboard</url-pattern>
    </servlet-mapping>
 
 
    <servlet-mapping>
        <servlet-name>default</servlet-name>
        <url-pattern>/assets/*</url-pattern>
    </servlet-mapping>
 
</web-app>

为您的应用配置Java Servlet插件

请注意,到现在为止,我们没有需要配置插件本身 :一切都只是工作“。 但是现在我们有了一些特定于应用程序的实施规则,我们需要通过一个简单的stormpath.properties配置文件告诉插件该做什么。 让我们创建这个文件:

src/main/webapp/WEB-INF/stormpath.properties

stormpath.web.login.nextUri = /dashboard
 
stormpath.web.uris./dashboard = authc
  • 第一行表示“用户成功登录后,我希望他们访问的下一个URI是/dashboard ”。 插件的登录控制器将自动将新认证的用户重定向到此位置。
  • 第二行表示“为了使任何人都可以访问/dashboard URI,必须对其进行身份验证('authc'是'authenticated'的缩写)。 这将强制所有请求由有效的用户帐户进行身份验证,然后再允许其继续。 如果不是,它们将被重定向到登录页面以首先登录,然后自动被重定向回其最初请求的URI。

运行更新的应用程序

现在,我们已经添加了仪表板视图和控制器,以及一个简单的stormpath.properties文件,让我们尝试一下!

如果还没有,请按CTRL-C关闭应用程序。

现在启动它:

Maven:

mvn tomcat7:run

摇篮:

gradle tomcatRun

现在尝试访问http://localhost:8080/dashboard –您将按预期重定向到登录名。 使用您先前创建的用户帐户登录,然后它将自动将您重定向回仪表板。 真好!

仪表板

Stormpath Java Servlet插件-高级功能

恭喜你! 您现在拥有了一个完整的Web应用程序,其中包括自动用户注册,登录,忘记密码/重置工作流,注销,自定义数据编辑和访问控制执行!

但是,我们只是摸索了您可以做的事情。 还支持:

  • 具有国际化(i18n)支持的完全默认视图自定义。
  • 授权断言(基于帐户数据(例如用户名),它们属于的组等)
  • 针对Javascript和移动客户端的令牌身份验证(我们为您实现了OAuth)
  • 用户名/密码和API密钥的HTTP基本身份验证
  • 事件侦听器对登录,注销,注册等事件做出反应。
  • 缓存可增强性能。
  • 用于自定义身份验证或授权规则的便捷过滤器链定义。
  • Easy Stormpath SDK客户端配置和请求访问
  • 和更多!

请参阅完整的Stormpath Java Servlet插件文档以获取完整信息。

建筑物身份管理,包括身份验证和授权? 尝试Stormpath! 我们的REST API和强大的Java SDK支持可以消除您的安全风险,并且可以在几分钟内实现。 注册 ,再也不会建立auth了!

翻译自: https://www.javacodegeeks.com/2016/07/build-java-web-app-quickly-java-servlet-jsp-tags-stormpath.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值