我使用注释配置了属性源:
@PropertySource(value = {"classpath:application.properties"})
但我仍然收到错误Could not resolve placeholder 'jwt.secret' in string value
@PropertySource(value = {"classpath:application.properties"})
public class JwtAuthenticationTokenFilter extends AbstractAuthenticationProcessingFilter {
@Value("${jwt.header}")
private String tokenHeader;
public JwtAuthenticationTokenFilter() {
super("/**");
}
}
调度员的servlet:
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:mvc="http://www.springframework.org/schema/mvc" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:security="http://www.springframework.org/schema/security"
xmlns:jpa="http://www.springframework.org/schema/data/jpa"
xmlns:tx="http://www.springframework.org/schema/tx"
xsi:schemaLocation="
http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-4.1.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-4.1.xsd
http://www.springframework.org/schema/mvc
http://www.springframework.org/schema/mvc/spring-mvc-4.1.xsd
http://www.springframework.org/schema/security
http://www.springframework.org/schema/security/spring-security-4.1.xsd
http://www.springframework.org/schema/data/jpa
http://www.springframework.org/schema/data/jpa/spring-jpa.xsd
http://www.springframework.org/schema/tx
http://www.springframework.org/schema/tx/spring-tx.xsd">
<context:component-scan base-package="com.rsc."/>
<mvc:annotation-driven />
<mvc:resources mapping="/resources/**" location="/resources/"/>
<bean id="messageSource" class="org.springframework.context.support.ReloadableResourceBundleMessageSource">
<property name="basenames">
<list>
<value>classpath:validation</value>
</list>
</property>
</bean>
<!-- <bean class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
<property name="locations">
<list>
<value>classpath:application.yml</value>
</list>
</property>
</bean>-->
<!-- <security:authentication-manager alias="authenticationManager">
<security:authentication-provider user-service-ref="userDetailsServiceImpl">
<security:password-encoder ref="encoder"></security:password-encoder>
</security:authentication-provider>
</security:authentication-manager>-->
<!--<bean id="userDetailsServiceImpl" class="com.rsc.service.UserDetailsServiceImpl"></bean>-->
<bean id="JwtAuthenticationTokenFilter" class="com.rsc.security.JwtAuthenticationTokenFilter">
<property name="authenticationManager" ref="authenticationManager" />
<property name="authenticationSuccessHandler" ref="jwtAuthenticationSuccessHandler" />
</bean>
<security:authentication-manager alias="authenticationManager">
<security:authentication-provider ref="jwtAuthenticationProvider" />
</security:authentication-manager>
<bean id="encoder" class="org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder">
<constructor-arg name="strength" value="11"/>
</bean>
<!-- Configure the data source bean -->
<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
<property name="driverClassName" value="${jdbc.driverClassName}"/>
<property name="url" value="${jdbc.url}"/>
<property name="username" value="${jdbc.username}"/>
<property name="password" value="${jdbc.password}"/>
</bean>
<!-- Configure the entity manager factory bean -->
<bean id="entityManagerFactory" class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean">
<property name="dataSource" ref="dataSource"/>
<property name="packagesToScan" value="com.rsc.model"/>
<property name="jpaVendorAdapter">
<bean class="org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter"/>
</property>
<property name="jpaProperties">
<props>
<prop key="hibernate.dialect">org.hibernate.dialect.MySQLDialect</prop>
<prop key="hibernate.show_sql">true</prop>
<prop key="hbm2ddl.auto">create</prop>
<prop key="hibernate.id.new_generator_mappings">false</prop>
</props>
</property>
</bean>
<!-- Configure the transaction manager bean -->
<bean id="transactionManager"
class="org.springframework.orm.jpa.JpaTransactionManager">
<property name="entityManagerFactory" ref="entityManagerFactory"/>
</bean>
<!-- Enable annotation driven transaction management -->
<tx:annotation-driven/>
<jpa:repositories base-package="com.rsc.repository"/>
<bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="prefix" value="/WEB-INF/views/"/>
<property name="suffix" value=".jsp"/>
</bean>
</beans>
应用程序属性:
jdbc.driverClassName=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/rs_education
jdbc.username=admin
jdbc.password=admin
jwt:
header: Authorization
secret: my-very-secret-key
logging:
level:
org.springframework.security: DEBUG
server:
port: 8888
spring:
resources:
chain:
enabled: true
management:
security:
enabled: true # set to false to disable 'default' Spring Boot security
答案 0 :(得分:2)
答案 1 :(得分:1)
你不能这样做:
jwt:
header: Authorization
secret: my-very-secret-key
应该是这样的:
jwt.header=Authorization
jwt.secret=my-very-secret-key
答案 2 :(得分:0)
我发现了一个新细节:如果您使用多模块,那么此属性将写入主yaml/properties
中。请勿使用模块的yaml/properties
。无法扫描。
答案 3 :(得分:0)
应该在下面;
@PropertySource(value = {"classpath:application.yml"})
public class JwtAuthenticationTokenFilter extends AbstractAuthenticationProcessingFilter {
@Value("${jwt.header}")
private String tokenHeader;
public JwtAuthenticationTokenFilter() {
super("/**");
}
}
固定注解。
@PropertySource(value = {"classpath:application.yml"})