声明式安全(2)——BASIC身份验证方式

本文详细介绍了如何在应用中配置BASIC验证,并通过声明式安全实现对特定资源的访问控制。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、步骤

  1. 设置用户名、密码和角色
  2. 告诉服务器目前正在使用BASIC验证。指定域的名称
  3. 指定要保护的URL
  4. 列出可以访问的角色
  5. 指定哪些URL只能通过SSL访问
  6. 禁用invoker servlet

二、实例

  1. 将D:\Test\Servers\Tomcat v6.0 Server at localhost-config/tomcat-users.xml文件当中的
    <tomcat-users>
    <role rolename="tomcat"/>
    <role rolename="role1"/>
    <user password="tomcat" roles="tomcat" username="tomcat"/>
    <user password="tomcat" roles="tomcat,role1" username="both"/>
    <user password="tomcat" roles="role1" username="role1"/>
    </tomcat-users>注释去掉,这样我们就有了tomcat和role1这两个角色,同时三个用户。
  2. 在web.xml文件当中加入如下代码:
    我们要保护的资源
    <security-constraint>
    <web-resource-collection>
    <web-resource-name>ssl</web-resource-name>
    <url-pattern>/ssl/*</url-pattern>
    </web-resource-collection>
    <auth-constraint>
    <role-name>tomcat</role-name>
    </auth-constraint>
    <!-- <user-data-constraint>
    <transport-guarantee>CONFIDENTIAL</transport-guarantee>
    </user-data-constraint> -->
    </security-constraint>

    声明能够访问这些资源的角色
    <security-role>
    <role-name>tomcat</role-name>
    </security-role>

    告诉服务器使用BASIC验证
    <login-config>
    <auth-method>BASIC</auth-method>
    <realm-name>Internet</realm-name>
    </login-config>
  3. 在ssl文件夹下建立要访问的页面即可

三、说明

声明式安全是基于服务器的安全,其对于servlet和jsp也完全透明的,servlet和jsp页面无需任何改动。用户登录不成功时返回401
### 实现Spring Security OAuth2密码授权模式整合 为了在Spring Security中实现OAuth2密码授权模式的整合,需遵循一系列配置和编码实践。具体来说,在应用程序中引入必要的依赖项之后,还需设置认证服务器以及客户端的相关属性。 #### 添加Maven依赖 首先,在`pom.xml`文件中加入支持OAuth2自动配置的支持: ```xml <dependency> <groupId>org.springframework.security.oauth.boot</groupId> <artifactId>spring-security-oauth2-autoconfigure</artifactId> <version>2.1.3.RELEASE</version> </dependency> ``` 此操作确保了应用能够利用Spring Boot Starter简化OAuth2组件的初始化过程[^3]。 #### 配置认证服务器 创建一个类来定义认证服务器的行为,并通过注解指定其作为资源服务端的角色。对于密码授权模式而言,重要的是要允许特定类型的令牌授予请求——即password类型。这通常涉及到重写默认的安全配置并注册自定义化的TokenEndpointAuthenticationFilter过滤器以处理来自用户的凭证提交。 ```java @Configuration @EnableAuthorizationServer public class AuthorizationServerConfig extends AuthorizationServerConfigurerAdapter { @Autowired private AuthenticationManager authenticationManager; @Override public void configure(ClientDetailsServiceConfigurer clients) throws Exception { clients.inMemory() .withClient("my-trusted-client") .authorizedGrantTypes("password", "authorization_code", "refresh_token") .authorities("ROLE_CLIENT", "ROLE_TRUSTED_CLIENT") .scopes("read", "write", "trust") .resourceIds("oauth2-resource") .secret("{noop}secret"); } @Bean @Primary public DefaultTokenServices tokenServices() { final DefaultTokenServices defaultTokenServices = new DefaultTokenServices(); defaultTokenServices.setSupportRefreshToken(true); return defaultTokenServices; } } ``` 上述代码片段展示了如何声明内存中的客户端详情服务实例及其权限范围;同时也启用了刷新令牌的功能以便于长期访问控制[^1]。 #### 客户端发起token请求 当一切准备就绪后,客户端可以通过POST方法向`/auth/oauth/token`发送HTTP请求获取access token。此时应携带基本身份验证头信息(Base64编码后的client_id:client_secret),并将用户名、密码以及其他必要参数放在查询字符串或表单数据内传递给服务器。 ```javascript return request({ url: '/auth/oauth/token', headers: { 'isToken': false, 'Authorization': 'Basic YWRtaW46YWRtaW4=' // Base64 encoded admin:admin }, method: 'post', params: { username: 'yourUsernameHere', password: 'yourPasswordHere', grant_type: 'password', scope: 'read write' } }); ``` 这段JavaScript AJAX调用模拟了一个典型的场景,其中包含了必需的身份验证头部字段与body内的参数列表[^4]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值