spring security 学习笔记(一)

运用spring security 首先应该在web.xml里加入一个过滤器

 

  <filter>
  	<filter-name>springSecurityFilterChain</filter-name>
  	<filter-class>org.springframework.web.filter.DelegatingFilterProxy</filter-class>
  </filter>
  <filter-mapping>
  	<filter-name>springSecurityFilterChain</filter-name>
  	<url-pattern>/*</url-pattern>
  </filter-mapping>

     我们添加了一个过滤器,他是调用Spring Security的入口。

DelegatingFilterProxy代表一个filter,这个filter其实是spring容器中的一个bean。例如上面的例子,那么Spring容器中就会有一个名为“springSecurityFilterChain”的bean。 这个bean是通过spring security标签创建的,负责处理web 安全。

     添加完上面的代码,接下来需要在spring的配置文件中运用<http>标签来配置spring security的业务。

 

<sec:http auto-config="true">
	 <sec:intercept-url pattern="/**" access="ROLE_USER"/>
</sec:http> 

     这段代码的意思是说,我们希望所有进入wen应用的连接都需要安全验证。并且只有是“ROLE_USER”角色的用户可以访问。<http>标签是root标签。<intercept-url>是<http>的子标签。<intercept-url>标签中有一个"pattern"属性,通过它的值来匹配进入web应用的连接请求。<intercept-url>标签中的access属性的值为访问控制限制。

 

     直接在配置文件里定义测试数据

 

<sec:authentication-manager>
	 <sec:authentication-provider>
	 	<sec:user-service>
	 		<sec:user name="aaa" password="AAA" authorities="ROLE_USER,ROLE_ADMIN"/>
	 		<sec:user name="bbb" password="BBB" authorities="ROLE_USER"/>
	 	</sec:user-service>
	 </sec:authentication-provider>
</sec:authentication-manager> 

     定义了两个用户分别是 aaa 和 bbb。也可以通过<sec:user-service>标签中的"properties"属性从一个properties文件中加载用户的信息。

     <authentication-provider>标签的作用指出定义的用户信息将会被authentication Manager使用,别且来处理认证请求。

     配置完这些就可以启动web应用,做登录请求了。上面的配置其实已经添加了一些安全业务处理,因为运用"auto-config"属性,例如简单的登录处理。

     auto-config 自动配置了一些设置,包括默认的登录界面、认证处理等。

 

  <http auto-config='true'>
    <intercept-url pattern="/**" access="ROLE_USER" />
  </http>

      上面的代码片段与下面的含义是一样的

 

 写道
<http>
<intercept-url pattern="/**" access="ROLE_USER"/>
<form-login />
<http-basic />
<logout />
</http>

 

     从上面的配置,我们不知道应该从哪个页面执行登录操作,没有提及任何html或JSP等页面。其实我们不需要指出一个具体的URL作为登录界面。Spring Security会自动生成一个登录界面。

     如果想任务请求都不受安全限制的话,可以把access的值设置成“IS_AUTHENTICATED_ANONYMOUSLY”,则请求将被安全机制忽视

    <form-login>标签的属性
  1. login-page:指向自定义的登录界面URL。
  2. default-target-url:登录后跳转的页面URL。
  3. always-use-default-target:登录后跳转的URL是否可用
    例如
<sec:form-login login-page="/login.jsp" default-target-url="/doahbord" always-use-default-target='true'/>
      应用其他的“Authentication Providers”

     authentication provider作用是将用户信息提供给 authentication manager进行用户认证的。有些时候我们需要更详细的用户信息,那么上面通过在配置文件中定义用户内容就不能满足我们要求。而且用户的信息存储不光只在配置文件中,用户信息可以存储在数据库或者LDAP Server中等。可以通过自定义一个实现接口“UserDetaislService”的类。例如:

 

  <authentication-manager>
    <authentication-provider user-service-ref='myUserDetailsService'/>
  </authentication-manager>

   上面的例子 “myUserDetailsService”是我们自定义的一个类。他负责将用户信息封装成UserDetails类。

 

   如果用户的信息是存储在数据库中,那么可以用下面的配置

 

  <authentication-manager>
    <authentication-provider>
      <jdbc-user-service data-source-ref="securityDataSource"/>
    </authentication-provider>
  </authentication-manager>

    “securityDataSource”是一个DataSource类型的bean。这个bean指向数据库,并且数据库中有标准的spring security用户tables。具体表结构可以通过spring官网查询。

 

   会话控制 session management

    检测session超时

    可以通过配置检测session超时并且将请求冲定向一个适当的URL。可以在配置文件里进行如下配置实现该功能

 

  <http>
    ...
    <session-management invalid-session-url="/invalidSession.htm" />
  </http>

    上面配置的session超时检测有些时候会报出一些不恰当的异常。例如当一个用户注销后又重新登录,但是整个过程没有关闭游览器,这是因为游览器的cookie中仍然存储着这个被废除的session。可以通过配置当注销的时候删除cookie中的session。如下:

 

  <http>
    <logout delete-cookies="JSESSIONID" />
  </http>
   单点登录控制

    如果你想应用支持单点登录,那么要在spring security框架外部做一些简单配置。

    首先要在web.xml里面加入一个listener

 

  <listener>
    <listener-class>
      org.springframework.security.web.session.HttpSessionEventPublisher
    </listener-class>
  </listener>

    然后再spring配置文件中加入下面代码

 

  <http>
    ...
    <session-management>
        <concurrency-control max-sessions="1" />
    </session-management>
  </http>

    这样就可以防止一个用户多次登录(用户第二次登录将会导致第一次登录会话失效)。如果想防止第二次登录可以做如下配     置,那么第二次登录就会失败,不会导致第一次登录的会话失效

 

  <http>
    ...
    <session-management>
        <concurrency-control max-sessions="1" error-if-maximum-exceeded="true" />
    </session-management>
  </http>

    上面的配置会导致第二次会话被拒绝,如果是通过form-login的形式登录的话,那么请求就会被转发到认证失败的页面

 

 

    认证管理组件

    AuthenticationManager是spring security认证服务的主要接口。它通常是ProviderManager类的一个实例。AuthenticationManager是通过<authentication-manager>标签被注册到spring容器中的。

    AuthenticationManager通常是与AuthenticationProvider结合一起使用的。AuthenticationProvider可以通过<authentication-provider>标签注册到spring 容器中。代码如下

 

  <authentication-manager>
    <authentication-provider ref="casAuthenticationProvider"/>
  </authentication-manager>

  <bean id="casAuthenticationProvider"
      class="org.springframework.security.cas.authentication.CasAuthenticationProvider">
    ...
  </bean>
1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。
应用背景为变电站电力巡检,基于YOLO v4算法模型对常见电力巡检目标进行检测,并充分利用Ascend310提供的DVPP等硬件支持能力来完成流媒体的传输、处理等任务,并对系统性能做出一定的优化。.zip深度学习是机器学习的一个子领域,它基于人工神经网络的研究,特别是利用多层次的神经网络来进行学习和模式识别。深度学习模型能够学习数据的高层次特征,这些特征对于图像和语音识别、自然语言处理、医学图像分析等应用至关重要。以下是深度学习的一些关键概念和组成部分: 1. **神经网络(Neural Networks)**:深度学习的基础是人工神经网络,它是由多个层组成的网络结构,包括输入层、隐藏层和输出层。每个层由多个神经元组成,神经元之间通过权重连接。 2. **前馈神经网络(Feedforward Neural Networks)**:这是最常见的神经网络类型,信息从输入层流向隐藏层,最终到达输出层。 3. **卷积神经网络(Convolutional Neural Networks, CNNs)**:这种网络特别适合处理具有网格结构的数据,如图像。它们使用卷积层来提取图像的特征。 4. **循环神经网络(Recurrent Neural Networks, RNNs)**:这种网络能够处理序列数据,如时间序列或自然语言,因为它们具有记忆功能,能够捕捉数据的时间依赖性。 5. **长短期记忆网络(Long Short-Term Memory, LSTM)**:LSTM 是一种特殊的 RNN,它能够学习长期依赖关系,非常适合复杂的序列预测任务。 6. **生成对抗网络(Generative Adversarial Networks, GANs)**:由两个网络组成,一个生成器和一个判别器,它们相互竞争,生成器生成数据,判别器评估数据的真实性。 7. **深度学习框架**:如 TensorFlow、Keras、PyTorch 等,这些框架提供了构建、训练和部署深度学习模型的工具和库。 8. **激活函数(Activation Functions)**:如 ReLU、Sigmoid、Tanh 等,它们在神经网络用于添加非线性,使得网络能够学习复杂的函数。 9. **损失函数(Loss Functions)**:用于评估模型的预测与真实值之间的差异,常见的损失函数包括均方误差(MSE)、交叉熵(Cross-Entropy)等。 10. **优化算法(Optimization Algorithms)**:如梯度下降(Gradient Descent)、随机梯度下降(SGD)、Adam 等,用于更新网络权重,以最小化损失函数。 11. **正则化(Regularization)**:技术如 Dropout、L1/L2 正则化等,用于防止模型过拟合。 12. **迁移学习(Transfer Learning)**:利用在一个任务上训练好的模型来提高另一个相关任务的性能。 深度学习在许多领域都取得了显著的成就,但它也面临着一些挑战,如对大量数据的依赖、模型的解释性差、计算资源消耗大等。研究人员正在不断探索新的方法来解决这些问题。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值