`

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差不多),基本功能已经满足我们的要求了,个别接口不适用的可...

    基于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. **程序设计原则**:程序设计时应优先考虑程序的可读性和可维护性,...

    login-module-master_java_源码.zip

    Java提供了多种认证框架,如Spring Security,它支持多种认证策略,如Basic Auth、Form-Based Auth等。 5. **会话管理**:成功登录后,系统通常会创建一个会话(Session)来跟踪用户的活动。Java的HttpSession接口...

Global site tag (gtag.js) - Google Analytics