`

REST安全实践·2.FORM认证

阅读更多

2. DataSourceRealm + FORM认证

  • Accesses authentication information stored in a relational database, accessed via a named JNDI JDBC DataSource.
  • 通过JNDI访问关系型数据库,获取认证信息

2.1 创建Realm所需的数据表

mysql -uroot -p < security.sql

2.2 配置DataSourceRealm

$CATALINA_BASE/conf/server.xml 设置DATA SOURCE

<Resource auth="Container"
driverClassName="org.gjt.mm.mysql.Driver"
type="javax.sql.DataSource"
name="jdbc/rest-security"
username="root" password="root" 
url="jdbc:mysql://localhost:3306/simple_service_book"
validationQuery="select 1 from users"/>

设置DataSourceRealm

<Realm className="org.apache.catalina.realm.DataSourceRealm"
   dataSourceName="jdbc/rest-security"
   userTable="users"
   userNameCol="user_name"
   userCredCol="user_pass"
   userRoleTable="user_roles"
   roleNameCol="role_name"/>

Eclipse内置Tomcat配置 eclipse.server.xml

2.3 数据库驱动

拷贝Mysql的JDBC驱动到$CATALINA_HOME/lib目录。使用Maven的项目可以从本地仓库取得,否则从网上搜吧。

M2_REPO/mysql/mysql-connector-java/5.1.25/mysql-connector-java-5.1.25.jar 
(仓库地址举例:M2_REPO=C:\Users\hanl\.m2\repository)

2.4 配置应用的web.xml

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

<resource-ref>
    <description>MySQL DB Connection Pool</description>
    <res-ref-name>jdbc/rest-security</res-ref-name>
    <res-type>javax.sql.DataSource</res-type>
    <res-auth>Container</res-auth>
    <res-sharing-scope>Shareable</res-sharing-scope>
</resource-ref>

<security-constraint>
    <web-resource-collection>
        <url-pattern>/*</url-pattern>
        <http-method>GET</http-method>
    </web-resource-collection>
    <web-resource-collection>
        <url-pattern>/webapi/*</url-pattern>
        <http-method>GET</http-method>
        <http-method>POST</http-method>
        <http-method>UPDATE</http-method>
        <http-method>DELETE</http-method>
    </web-resource-collection>
    <auth-constraint>
        <role-name>admin</role-name>
    </auth-constraint>
</security-constraint>

<security-constraint>
    <web-resource-collection>
        <url-pattern>/*</url-pattern>
        <http-method>GET</http-method>
    </web-resource-collection>
    <web-resource-collection>
        <url-pattern>/webapi/*</url-pattern>
        <http-method>GET</http-method>
    </web-resource-collection>
    <auth-constraint>
        <role-name>user</role-name>
    </auth-constraint>
</security-constraint>

<login-config>
    <auth-method>FORM</auth-method>
    <form-login-config>
        <form-login-page>/login.html</form-login-page>
        <form-error-page>/error.html</form-error-page>
    </form-login-config>
</login-config>

<welcome-file-list>
    <welcome-file>/index.html</welcome-file>
</welcome-file-list>

2.5 登录页面

<form action="j_security_check">
    <div>
        <span>User Name</span>
        <input id="j_username" name="j_username" type="text" />
    </div>
    <div style="margin-top:10px;margin-bottom:10px;">
        <span>Pass Word</span>
        <input id="j_password" name="j_password" type="password" />
    </div>
    <input type="submit" value="Sign In" />
</form>

2.6 FORM认证

C:\Users\hanl.m2\repository\org\apache\tomcat\tomcat-catalina\7.0.42\tomcat-catalina-7.0.42-sources.jar

Realm.authenticate() form-handling

2.7 应用权限测试

测试用例1

测试地址=http://localhost:8080/security-rest/

测试方法=FORM j_security_check

测试用户=eric role=admin

测试结果=**302 Found**

测试用例2

测试地址=http://localhost:8080/security-rest/webapi/books

测试方法=POST

测试用户=eric role=admin

测试结果=**200 OK**

测试用例3

测试地址=http://localhost:8080/security-rest/webapi/books

测试方法=POST

测试用户=caroline role=user

测试结果=**403 Forbidden**

0
1
分享到:
评论

相关推荐

    谷歌插件Advanced-REST-client

    2. **Multipart/form-data上传**: 支持文件上传,适用于需要POST表单数据的场景。 3. **定时任务**: 可设置定时发送请求,用于模拟定期触发的API调用。 4. **脚本支持**: 使用JavaScript编写预请求和后请求脚本,...

    restsecurity:一个有关如何实现REST安全功能的小型教程项目

    Spring Security不仅支持传统的HTTP Basic或Form Login,还专门针对REST服务提供了OAuth2、JWT(JSON Web Token)等认证和授权机制。在"restsecurity"项目中,可能会涵盖如何配置Spring Security以保护REST端点,...

    Java 调用虚拟网络本地网关的 REST API1

    在本文中,我们将深入探讨如何使用Java调用虚拟网络本地网关的REST API来获取相关的本地网关信息。首先,我们需要了解几个基本...确保遵循最佳实践,比如使用HTTPS进行安全通信,以及及时处理可能出现的错误和异常。

    flowable-ui:整合Flowable官方的Rest包(flowable-modeler,flowable-idm,flowable-task,flowable-admin,flowable-rest),后端SpringBoot,前端Nginx,前后台分离部署,表单设计器汉化处理,提供在线体验地址

    经过两周左右时间的学习,Flowable基础知识自认为学习完毕,简单构思设计之后,开始上手实践了。由于Flowable官方已经提供了丰富的REST包(和Activiti差不多),基本功能已经满足我们的要求了,个别接口不适用的可...

    SAP PI HTTP Receiver Adapter Configuration.doc

    #### 一、概述 SAP Process Integration (SAP PI) 是一个用于企业内部以及与外部合作伙伴之间进行消息交换的集成平台。...在实际应用中,还需要结合具体的业务场景和技术背景来进行更深入的研究和实践。

    基于python的Django服务器博客网站.rar

    2. **最佳实践**:了解Django社区的最佳实践,如使用Django Rest Framework构建API,使用Celery处理异步任务,使用Gunicorn和Nginx优化性能。 通过以上内容,我们可以看到,利用Python的Django框架构建一个博客网站...

    Django与DjangoRESTframework课件资料.zip

    5. **表单(Form)**:处理用户输入数据,进行验证和数据绑定。 6. **中间件(Middleware)**:全局操作请求和响应,实现跨视图的功能。 7. **数据库管理**:数据库迁移,自定义管理命令。 8. **URL路由**:定义URL...

    android c# webservice 实现

    2. 认证机制:实施OAuth或其他认证方式,确保只有授权的客户端才能访问WebService。 六、调试与测试 使用Postman等工具模拟请求,检查WebService的响应。在Android端,使用Logcat查看日志,帮助调试网络请求。 ...

    ggj-spring-security

    Spring Security支持多种认证方式,如HTTP Basic、Form Login、OAuth2等。 - **授权**:确定认证后的用户是否可以访问特定的资源。Spring Security的访问控制基于角色,通过定义权限和角色关系进行控制。 5. **...

    基于微信小程序疫苗预约系统+ssm后端源码案例设计带文档说明.zip

    2. JWT(JSON Web Token)认证:为了安全地处理用户登录和授权,系统可能使用JWT来生成和验证用户令牌,实现无状态的会话管理。 【文档说明】: 1. 系统架构图:文档可能包含了系统的整体架构设计,包括前后端的交互...

    django-rest

    6. **权限和认证**:设置合适的权限和认证策略,确保API的安全性。 7. **测试**:使用Django提供的测试客户端或者第三方库如`requests`进行API的单元测试和集成测试。 **最佳实践** 1. **版本控制**:为API提供...

    Python基于Django家政服务管理系统设计毕业源码案例设计.zip

    通过以上知识点,我们可以看出这个基于Django的家政服务管理系统不仅涉及Web开发的基本技术,还涵盖了数据库管理、用户认证、数据安全等多个方面,是学习和实践Web开发的优秀案例。通过阅读和研究源码,开发者可以...

    Spring安全实践

    我们可以利用HttpBasic、Token认证,或者OAuth2等实现对REST接口的安全保护。 九、与Spring Boot的整合 Spring Boot简化了Spring Security的配置,通过自动配置和 starter 包,使得在Spring Boot项目中启用Spring ...

    sendsms.rar_SendSms_sms

    我们将详细讨论这个主题,包括所需的库、API接口、安全考虑以及最佳实践。 首先,发送短信通常涉及到使用第三方SMS网关服务,这些服务提供了API接口供开发者集成到他们的应用中。在C#中,我们可以通过HTTP请求或者...

    ZendFramework-1.5.3.tar.gz

    2. **组件化结构**:Zend Framework采用模块化设计,包含许多独立的组件,如数据库抽象层(Zend_Db)、表单处理(Zend_Form)、视图助手(Zend_View_Helper)、认证和授权(Zend_Auth和Zend_Acl),以及RESTful Web...

    django食堂外卖系统.7z

    2. Model-View-Template(MVT)架构:Django的MVT架构是其核心设计理念,Model代表数据模型,负责与数据库交互;View负责业务逻辑,处理用户请求并返回响应;Template则是视图模板,用于定义页面布局和显示内容。 3...

    IBM NOTES 考试模拟题

    2. **数据库设计**:Notes数据库是其核心组件,考生应熟悉Notes Form(表单)、View(视图)和Agent(代理)的概念,以及如何利用这些元素构建高效的应用程序。 3. **安全性**:理解并能设置Notes的安全机制,包括...

    ZendFramework-1.12.9 手册 (HTML版)

    2. **企业级特性**:支持企业级的安全、性能和可扩展性,如安全的输入验证、输出过滤、认证和授权机制。 3. **MVC架构**:遵循 MVC 设计模式,使代码结构清晰,易于维护和扩展。 4. **兼容性**:与 PHP5.2.5 及以上...

    NodejsExpressjsVuejsElementUI全栈开发王者荣耀手机端官网和管理后台

    9. **安全和认证**:实现代理服务器解决跨域问题,了解JSON Web Token(JWT)或OAuth等认证机制,保护用户数据安全。 10. **部署与测试**:学习如何将项目部署到服务器,如Heroku或DigitalOcean,并进行性能优化和...

    2021-2022计算机二级等级考试试题及答案No.1169.docx

    【计算机二级考试题】是针对计算机知识的资格认证考试,主要测试考生的计算机应用技能和基础知识。以下是根据题目内容解析的一些关键知识点: 1. **程序设计原则**:程序设计时应优先考虑程序的可读性和可维护性,...

Global site tag (gtag.js) - Google Analytics