我正在使用Spring Security 3.2和Spring 4.0.1
我正在努力将xml配置转换为Java配置.当我在我的过滤器中注释AuthenticationManager时@Autowired,我得到一个例外
Caused by: org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type [org.springframework.security.authentication.AuthenticationManager] found for dependency: expected at least 1 bean which qualifies as autowire candidate for this dependency. Dependency annotations: {}
Run Code Online (Sandbox Code Playgroud)
我已经尝试过注射AuthenticationManagerFactoryBean但是也失败了类似的例外.
这是我正在使用的XML配置
<?xml version="1.0" encoding="UTF-8"?> <beans ...>
<security:authentication-manager id="authenticationManager">
<security:authentication-provider user-service-ref="userDao">
<security:password-encoder ref="passwordEncoder"/>
</security:authentication-provider>
</security:authentication-manager>
<security:http
realm="Protected API"
use-expressions="true"
auto-config="false"
create-session="stateless"
entry-point-ref="unauthorizedEntryPoint"
authentication-manager-ref="authenticationManager">
<security:access-denied-handler ref="accessDeniedHandler"/>
<security:custom-filter ref="tokenAuthenticationProcessingFilter" position="FORM_LOGIN_FILTER"/>
<security:custom-filter ref="tokenFilter" position="REMEMBER_ME_FILTER"/>
<security:intercept-url method="GET" pattern="/rest/news/**" access="hasRole('user')"/>
<security:intercept-url method="PUT" pattern="/rest/news/**" access="hasRole('admin')"/>
<security:intercept-url method="POST" …Run Code Online (Sandbox Code Playgroud) 我正在使用 Liquibase Hibernate 插件生成从实体类到数据库的 diffChangeLog。
我遇到的一个问题是 Liquibase 为主键生成的名称太短。
例如我有2张桌子,
unsub_template 和 unsub_template_item
生成的变更集分别是
<changeSet author="rince(generated)" id="1405359138759-50">
<createTable tableName="unsub_template">
<column autoIncrement="true" name="id" type="BIGINT">
<constraints primaryKey="true" primaryKeyName="unsub_templatPK"/>
</column>
Run Code Online (Sandbox Code Playgroud)
和
<changeSet author="rince(generated)" id="1405359138759-51">
<createTable tableName="unsub_template_item">
<column autoIncrement="true" name="id" type="BIGINT">
<constraints primaryKey="true" primaryKeyName="unsub_templatPK"/>
</column>
Run Code Online (Sandbox Code Playgroud)
请注意,primaryKeyName 属性均为 unsub_templatPK,长度均为 15 个字符
我做了一些调试,发现了长度为 的原因org.hibernate.mapping.PersistentClass。PK_ALIAS那里定义了一个静态字段
private static final Alias PK_ALIAS = new Alias(15, "PK");
Run Code Online (Sandbox Code Playgroud)
有什么办法可以配置 PK_ALIAS 吗?
我正在尝试使用Spring Security Annotations来实现安全性,而不是在XML中定义规则.它似乎工作,但当我遇到访问被拒绝错误时,我得到一个返回的HTTP状态代码500.我的tomcat日志文件中没有看到任何异常.当执行命中我的AuthenticationEntryPoint时,响应将被提交.
如果我恢复使用XML中的规则并获得拒绝访问错误,我会返回401状态代码返回.
该方法使用@PreAuthorize进行注释
@GET
@Produces(MediaType.APPLICATION_JSON)
@PreAuthorize("hasRole('user')")
public String list() throws IOException
Run Code Online (Sandbox Code Playgroud)
这是我的XML(之前的XML规则被注释掉了)
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:security="http://www.springframework.org/schema/security"
xmlns="http://www.springframework.org/schema/beans"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.0.xsd http://www.springframework.org/schema/security http://www.springframework.org/schema/security/spring-security-3.2.xsd">
<security:debug/>
<security:global-method-security pre-post-annotations="enabled"/>
<security:authentication-manager id="authenticationManager">
<security:authentication-provider user-service-ref="userDao">
<security:password-encoder ref="passwordEncoder"/>
</security:authentication-provider>
</security:authentication-manager>
<security:http
realm="Protected API"
use-expressions="true"
auto-config="false"
create-session="stateless"
entry-point-ref="unauthorizedEntryPoint"
authentication-manager-ref="authenticationManager">
<security:access-denied-handler ref="accessDeniedHandler"/>
<security:custom-filter ref="tokenAuthenticationProcessingFilter" position="FORM_LOGIN_FILTER"/>
<security:custom-filter ref="tokenFilter" position="REMEMBER_ME_FILTER"/>
<!--<security:intercept-url method="GET" pattern="/rest/news/**" access="hasRole('user')"/>-->
</security:http>
</beans>
Run Code Online (Sandbox Code Playgroud)