java - Spring Security 不适用于我的网址
问题描述
我设置了一个新的 Spring Web MVC 应用程序,并用它引入了 spring-security。这是我用于 spring-security 的配置
applicationContext-security.xml
<?xml version="1.0" encoding="UTF-8"?>
<beans:beans xmlns="http://www.springframework.org/schema/security"
xmlns:beans="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
http://www.springframework.org/schema/security
http://www.springframework.org/schema/security/spring-security-3.2.xsd">
<!-- enable use-expressions -->
<http auto-config="true" use-expressions="true">
<intercept-url pattern="/login" access="permitAll"/>
<intercept-url pattern="/**" access="isAuthenticated()" />
<form-login
login-page="/login"
authentication-failure-url="/login?error"
username-parameter="username"
password-parameter="password" />
<logout logout-success-url="/login?logout" />
</http>
<!-- Select users and user_roles from database -->
<authentication-manager>
<authentication-provider>
<jdbc-user-service data-source-ref="datasource"
users-by-username-query=
"select username,password, enabled from user where username=?"
/>
</authentication-provider>
</authentication-manager>
我也使用 Hibernate 5 来访问我的数据库
applicationContext-db.xml
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:tx="http://www.springframework.org/schema/tx"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-3.0.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx.xsd">
<context:property-placeholder location="classpath:db/database.properties"/>
<context:component-scan base-package="com.medkhelifi.tutorials.spring.springregistration" />
<context:annotation-config />
<bean id="userDao" class="com.medkhelifi.tutorials.spring.springregistration.dao.impl.UserDaoImpl"/>
<!-- Hibernate Factory -->
<bean id="datasource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
<property name="driverClassName" value="${database.driver}"/>
<property name="url" value="${database.url}"/>
<property name="username" value="${database.username}"/>
<property name="password" value="${database.password}"/>
</bean>
<bean id="hibernateFactory" class="org.springframework.orm.hibernate5.LocalSessionFactoryBean">
<property name="dataSource" ref="datasource"/>
<property name="annotatedClasses">
<list>
<value>com.medkhelifi.tutorials.spring.springregistration.model.User</value>
</list>
</property>
</bean>
<bean id="transcationManager" class="org.springframework.orm.hibernate5.HibernateTransactionManager">
<property name="sessionFactory" ref="hibernateFactory"/>
</bean>
<tx:annotation-driven transaction-manager="transcationManager" />
我用两个控制器创建了两个 jsp 页面:
- /jsp/login.jsp
- /jsp/hello.jsp
当我运行我的应用程序时,我可以不受任何限制地访问我的 index.jsp 和 /jsp/hello.jsp。我不知道我是否遗漏了什么。
(对不起,我的英语不好)
解决方案
这是一个老问题,但我想提一下为什么同样对我不起作用的根本原因:
我也使用了基于 XML 的配置,但似乎根本没有调用 Spring Security,因为甚至没有默认标头。这是因为我没有将 Spring 的 DelegatingFilterProxy 添加到 web.xml 中,如下所述:https ://docs.spring.io/spring-security/site/docs/5.0.x/reference/html/ns -config.html#ns-web-xml
添加过滤器后,Spring Security 开始设置默认标头,我可以继续添加我的自定义需求。
亲切的问候
斯特夫
推荐阅读
- javascript - 当 messagelistener 在 componentdidupdate 下时,侧边栏徽章计数工作
- amazon-web-services - AWS Java SDK:使用新的 RDS 实例信息更新 Route53 区域记录
- php - 如何按 dd/MM/YYYY 等顺序转换日期
- rust - 当 poll_read 的缓冲区没有足够的大小容纳我的缓冲区时该怎么办?
- python - 设置,jsonc 错误,我不知道错误是什么我从 yt 教程从 python 2 切换到 3
- python-3.x - 在这种情况下,超级对我来说毫无意义
- spring-boot - Spring Boot App 日志文件被保存到父目录而不是项目目录
- python - 如何在 Spyder 4+ IDE 上使用 finplot 和 yfinance 绘制烛台图?
- javascript - 即使状态正在更新,React 也不会在 setState 上重新渲染组件
- node.js - 会话未存储在节点中并使用快速会话做出反应