- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我刚刚了解了 spring security 并想使用 java hibernate 配置连接到数据库,但我发现的示例或教程很少。我通过使用 xml 配置找到了更多。我在这里使用 Spring 4.0.2、Spring-Security 3.2.0 和 Hibernate 4.3.2
我的问题是:下面的xml怎么转成java配置?
CustomUserDetailsService.java 所在的位置
package com.whatever.svtest.service.impl;
import java.util.ArrayList;
import java.util.List;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.security.core.authority.SimpleGrantedAuthority;
import org.springframework.security.core.userdetails.User;
import org.springframework.security.core.userdetails.UserDetails;
import org.springframework.security.core.userdetails.UserDetailsService;
import org.springframework.security.core.userdetails.UsernameNotFoundException;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import com.whatever.svtest.dao.UserDao;
@Dịch vụ
@Transactional(readOnly = true)
public class CustomUserDetailsService implements UserDetailsService {
@Autowired
private UserDao userDao;
@Ghi đè
public UserDetails loadUserByUsername(String username) throws UsernameNotFoundException {
com.whatever.svtest.model.User domainUser = userDao.getByUsername(username);
if (domainUser == null) {
throw new UsernameNotFoundException("user not found");
}
List authorities = new ArrayList();
authorities.add(new SimpleGrantedAuthority("USER"));
return new User(username, domainUser.getPassword(), true, true, true, true, authorities);
}
}
在 SecurityConfig.java 上,我使用 spring 创建的默认登录表单。我想自己弄清楚如何将 xml 配置转换为 java 配置。
package com.whatever.svtest.init;
nhập org.springframework.context.annotation.Configuration;
import org.springframework.security.config.annotation.authentication.builders.AuthenticationManagerBuilder;
import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity;
import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter;
import org.springframework.security.crypto.password.NoOpPasswordEncoder;
import com.whatever.svtest.service.impl.UserServiceImpl;
@Cấu hình
@EnableWebSecurity
lớp công khai SecurityConfiguration mở rộng WebSecurityConfigurerAdapter {
@Ghi đè
protected void configure(AuthenticationManagerBuilder auth) throws Exception {
auth.userDetailsService(new UserServiceImpl()).passwordEncoder(NoOpPasswordEncoder.getInstance());
}
}
然后我像这样将 SecurityConfiguration.java 放在 Initializer.java 上
package com.whatever.svtest.init;
import javax.servlet.Filter;
import org.springframework.web.filter.DelegatingFilterProxy;
import org.springframework.web.servlet.support.AbstractAnnotationConfigDispatcherServletInitializer;
public class Initializer extends AbstractAnnotationConfigDispatcherServletInitializer {
@Ghi đè
protected Class>[] getRootConfigClasses() {
// return null;
return new Class[] { SecurityConfiguration.class };
}
@Ghi đè
protected Class>[] getServletConfigClasses() {
return new Class>[] { WebAppConfig.class };
}
@Ghi đè
protected String[] getServletMappings() {
return new String[] { "/" };
}
@Ghi đè
protected Filter[] getServletFilters() {
return new Filter[] { new DelegatingFilterProxy("springSecurityFilterChain") };
}
}
WebAppConfig.java
package com.whatever.svtest.init;
import javax.annotation.Resource;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.ComponentScan;
nhập org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Import;
nhập org.springframework.context.annotation.PropertySource;
import org.springframework.context.support.ResourceBundleMessageSource;
import org.springframework.core.env.Environment;
import org.springframework.web.servlet.ViewResolver;
import org.springframework.web.servlet.config.annotation.EnableWebMvc;
import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter;
import org.springframework.web.servlet.view.InternalResourceViewResolver;
@Cấu hình
@EnableWebMvc
@Import({ DatabaseConfig.class })
@ComponentScan(basePackages = { "com.whatever.svtest.controller" })
@PropertySource({ "classpath:persistence-mysql.properties" })
public class WebAppConfig extends WebMvcConfigurerAdapter {
@Tài nguyên
private Environment env;
@Ghi đè
public void addResourceHandlers(ResourceHandlerRegistry registry) {
registry.addResourceHandler("/assets/**").addResourceLocations("/assets/");
}
@Đậu
public ResourceBundleMessageSource messageSource() {
ResourceBundleMessageSource source = new ResourceBundleMessageSource();
source.setBasename("messages");
source.setUseCodeAsDefaultMessage(true);
return source;
}
@Đậu
public ViewResolver setupViewResolver() {
InternalResourceViewResolver resolver = new InternalResourceViewResolver();
resolver.setPrefix("/WEB-INF/view/");
resolver.setSuffix(".jsp");
return resolver;
}
}
当我运行我的网络应用程序时,我得到了这个。 (我把图片放在这里 http://i.stack.imgur.com/Mssrc.jpg )
而且我还(在某处)阅读了有关创建 AuthenticationProvider.java 的自定义实现的内容,但我不知道将此代码放在哪里..
package com.whatever.svtest.init;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.security.authentication.AuthenticationProvider;
import org.springframework.security.core.Authentication;
import org.springframework.security.core.AuthenticationException;
import com.whatever.svtest.dao.UserDao;
import com.whatever.svtest.model.User;
public class MyAuthProvider implements AuthenticationProvider {
@Autowired
private UserDao userDao;
@Ghi đè
public Authentication authenticate(Authentication authentication) throws AuthenticationException {
String name = authentication.getName();
String password = authentication.getCredentials().toString();
User user = userDao.getByUsername(name);
authentication.setAuthenticated(user != null && password.equals(user.getPassword()));
return authentication;
}
@Ghi đè
public boolean supports(Class> authentication) {
return (MyAuthProvider.class.isAssignableFrom(authentication));
}
}
1 Câu trả lời
配置不一致?
您发布的配置对我来说不太有意义。具体如下:
protected void configure(AuthenticationManagerBuilder auth) throws Exception {
auth.userDetailsService(new UserServiceImpl()).passwordEncoder(NoOpPasswordEncoder.getInstance());
}
一个解决方案
您似乎没有定义 UserServiceImpl,但您已经定义了 CustomUserDetailsService(这可能是应该传入的参数。但是,为了 Autowiring 一个 bean,您需要将其创建为一个 bean。所以你应该这样改变你的配置:
protected void configure(AuthenticationManagerBuilder auth) throws Exception {
auth.userDetailsService(uds());
}
@Đậu
public CustomUserDetailsService uds() {
return new CustomUserDetailsService();
}
通过将 CustomUserDetailsService 作为 @Bean 返回,您可以确保 Spring 正确地 Autowiring 它。
一些附加说明:
改进 CustomUserDetailsService
要指出当前实现的一件事是,虽然您可以直接使用@Autowire 字段,但它更容易出错,因此您可能应该更改 CustomUserDetailsService 以具有允许注入(inject) UserDao 的构造函数。这也使单元测试更容易(因此您不需要使用反射来设置 UserDao)。因此,您会将 CustomUserDetailsService 更新为:
@Dịch vụ
@Transactional(readOnly = true)
public class CustomUserDetailsService implements UserDetailsService {
private UserDao userDao;
@Autowired
public CustomUserDetailsService(UserDao userDao) {
this.userDao = userDao;
}
那么你的配置可以是这样的:
protected void configure(AuthenticationManagerBuilder auth) throws Exception {
auth.userDetailsService(uds());
}
@Autowired
private UserDao userDao;
@Đậu
public CustomUserDetailsService uds() {
return new CustomUserDetailsService(userDao);
}
根据新错误更新
您还需要确保您的 UserDao 被拾取为 Bean。例如:
@Đậu
public UserDao userDao() {
return new UserDao(...);
}
注意:确保您正确初始化了 UserDao(即确保它的所有依赖项都已初始化。如果您在 UserDao 上使用 Autowired,请确保这些依赖项也是 @Đậu
.
关于java - 如何使用 Spring-Security 3 和 Hibernate 4 将 spring security xml 配置 hibernate 转换为 java 配置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22176693/
Như đã hỏi trong tiêu đề, tôi có hai tệp XML có cấu trúc sau: A.xml //ở đây tôi muốn đưa B.xml vào
Tôi có một tập tin xml. Theo yêu cầu của tôi, tôi cần cập nhật thẻ trống như tôi cần thay đổi thành . Có thể thay đổi thẻ như vậy không.. Cảm ơn... Câu trả lời hay nhất var xmlString = " "; var properString
Tôi có XML đơn giản như thế này: Bài hát đang phát 09:41:18 Frederic Delius Violin Son
Ở nơi làm việc của tôi, chúng tôi có lớp XML riêng để xây dựng DOM nhưng tôi không chắc chúng tôi nên xử lý các khoảng trắng liên tiếp như thế nào? Ví dụ, khi Hello World được đọc vào DOM, nút văn bản phải chứa Hello và World.
Tôi có 2 tệp xml sau và tôi phải xem qua tệp XML thứ 2 để so sánh wd:Task_Name_ID và TaskID. Ví dụ, Tệp XML chính-1 wd:Task_Name_ID có nội dung sau
Tôi có một chế độ xem XML trong ứng dụng Rails mà tôi cần chèn XML từ một tệp khác để phục vụ mục đích thử nghiệm. Tôi muốn nói "người xây dựng, chỉ cần điền ngẫu nhiên vào chuỗi này vì nó đã là XML" nhưng tôi không thấy bất cứ điều gì trong tài liệu thực hiện điều này
Tôi đang xây dựng lại một số nguồn cấp dữ liệu XML, vì vậy tôi đang tìm hiểu xem khi nào nên sử dụng các phần tử và khi nào nên sử dụng các thuộc tính với XML. Một số trang web nói rằng "dữ liệu nằm trong các phần tử, siêu dữ liệu nằm trong các thuộc tính". Vậy, sự khác biệt giữa hai loại này là gì? Hãy lấy W3Schools làm ví dụ:
Có phải XML được định dạng tốt khi có hai khai báo XML trong cùng một tài liệu không? Xin chào, tôi nghĩ là không, nhưng tôi không thể tìm thấy nguồn nào hỗ trợ tôi. Từ Ngôn ngữ đánh dấu mở rộng
Tôi cần nhúng một tài liệu XML tùy ý (hợp lệ về mặt cú pháp) vào một tài liệu XML bao bọc. Các tài liệu nhúng được coi là văn bản thuần túy và không cần phải phân tích cú pháp khi phân tích tài liệu được gói. Tôi biết về "thủ thuật CDATA", nhưng nếu bản thân tài liệu XML bên trong chứa CDATA
Trình phân tích cú pháp XML và bộ xử lý XML có phải là hai thứ khác nhau không? Đây có phải là hai công việc khác nhau không? Câu trả lời hay nhất Trình phân tích cú pháp XML và trình xử lý XML là giống nhau. Không áp dụng cho các ngôn ngữ khác. XML là ngôn ngữ đánh dấu dữ liệu có mục đích chung. Phân tích cú pháp các tập tin XML
Tôi sử dụng mã perl này để đọc XML từ một tệp và ghi vào tệp khác (toàn bộ tập lệnh của tôi có mã để thêm thuộc tính): #!usr/bin/perl -w use strict; use XML::DOM; use
Tôi đang viết một kịch bản về một sự kiện lịch sử mà tôi có hiểu biết hạn chế. Đối tượng A có kiểu system.xml.xmlelement và tôi cần chuyển đổi nó sang kiểu system.xml.xmldocument để so sánh với đối tượng B (kiểu
Tôi có hai tệp XML sau: Tệp 1 101 102 103 501 502 503
Tôi có hai tệp XML sau: Tệp 1 101 102 103 501 502 503
Tôi có một trường hợp mà tôi có một xml làm đầu vào và một xml khác làm đầu ra: Tôi có thể lựa chọn mã hóa bằng XSL và giải mã thông qua JAXB. Xét về hiệu suất, có sự khác biệt thực sự nào không? Câu trả lời tốt nhất là đầu tiên,
Tôi có XML chứa XML và tôi muốn phân tích cú pháp nó bằng JAXB qwqweqwezxcasdasd eee parser public static NotificationRequest parse(Strin
xml: mario de2f15d014d40b93578d255e6221fd60 Mario F 23 maria maria
Tôi gặp lỗi sau khi cố gắng cập nhật mảng tệp xml. Đoạn mã: File dir = new File("c:\\XML"); File[] files = dir.listFiles(new Filename
Làm thế nào tôi có thể thực hiện được điều gì đó như thế này: PS /home/nicholas/powershell> PS /home/nicholas/powershell> $date=(Get-Date | ConvertT
Tôi đang gặp khó khăn khi xóa một nút khỏi tệp xml. Tôi đã tìm thấy rất nhiều ví dụ về những người khác thực hiện điều này trong PowerShell thông qua nhiều cách khác nhau và mã bên dưới có vẻ giống với nhiều ví dụ khác mà tôi đã thấy, nhưng tôi không nhận được kết quả mong muốn. Mục tiêu của tôi là
Tôi là một lập trình viên xuất sắc, rất giỏi!