我正在尝试在方法级别定义访问规则,但它无法正常工作.
SecurityConfiguration
@Configuration
@EnableWebSecurity
@EnableGlobalMethodSecurity(prePostEnabled = true)
public class SecurityConfiguration extends WebSecurityConfigurerAdapter {
@Override
public void configure(AuthenticationManagerBuilder auth) throws Exception {
auth.inMemoryAuthentication().
withUser("user").password("user").roles("USER").and().
withUser("admin").password("admin").roles("ADMIN");
}
@Override
protected void configure(HttpSecurity http) throws Exception {
http
.sessionManagement()
.sessionCreationPolicy(SessionCreationPolicy.STATELESS)
.and()
.authorizeRequests()
.antMatchers("/v2/**").authenticated()
.and()
.httpBasic()
.realmName("Secure api")
.and()
.csrf()
.disable();
}
}
Run Code Online (Sandbox Code Playgroud)
ExampleController
@EnableAutoConfiguration
@RestController
@RequestMapping({"/v2/"})
public class ExampleController {
@PreAuthorize("hasAuthority('ROLE_ADMIN')")
@RequestMapping(value = "/home", method = RequestMethod.GET)
String home() {
return "Hello World";
}
}
Run Code Online (Sandbox Code Playgroud)
每当我尝试访问/ v2/home使用user:user它执行得很好,它不应该给我一个访问被拒绝错误,因为'用户'没有ROLE_ADMIN?
我实际上是在考虑在方法级别放弃访问规则并坚持使用http()ant规则,但我必须知道它为什么不适合我.
我有一个@Entity映射到视图,这是它的外观
import org.hibernate.annotations.Immutable;
import javax.persistence.*;
@Table(name = "user_earning")
@Entity
@Immutable
public class UserFlightEarning {
@Id public Long userId;
public Long flightId;
@Column(name = "flight_seq") public Long flightSequence;
}
Run Code Online (Sandbox Code Playgroud)
这很好用,我可以使用dao从视图中检索记录.但是我在日志中注意到Hibernate实际上是在尝试创建表但由于它已经存在而失败.
2015-11-12 21:56:34.841 ERROR 4204 --- [ost-startStop-1] org.hibernate.tool.hbm2ddl.SchemaExport:HHH000389:不成功:create table user_profile(user_id bigint not null,avg_airtime integer,avg_fuel_points integer ,avg_miles integer,email varchar(255),first_name varchar(255),flights_count integer,furthest_flight integer,last_name varchar(255),longest_flight integer,most_visited_city varchar(255),tier_end integer,tier_start integer,primary key(user_id))2015 -11-12 21:56:34.841 ERROR 4204 --- [ost-startStop-1] org.hibernate.tool.hbm2ddl.SchemaExport:表'user_profile'已经存在
我可以配置hibernate,以便跳过这些实体的创建吗?我认为@Immutable注释告诉Hibernate跳过创建,但似乎这个注释只是为了防止表上的crud操作.
我注意到,当您从 Gmail 转发 html 电子邮件(不确定其他提供商)时,html 结构会在此过程中发生变化。转发的 html 丢失了原始 html 中声明的所有 id,并且 html 上也发生了一些其他“清理”。
谁能解释为什么会发生这种情况或者是否可以避免?或者它完全依赖于 smtp 提供商吗?
我有一个应用程序可以监视特定收件箱上的电子邮件并尝试解析它,但正如我所说,当用户将其电子邮件转发到此收件箱(来自 gmail)时,电子邮件 html 结构会被清理,并且我的代码无法再解析 html因为很多id都消失了。
因此,我必须找到一种新方法来解析电子邮件中所需的内容,例如在 MIME 消息的明文部分使用正则表达式。
我搜索过这个问题,但没有找到任何信息。
我如何使用hibernate注释实现这一点?
目前的代码是:( 为简洁而剥离)
用户
@Entity
@Table(name = "user")
public class User implements java.io.Serializable {
@Id
@GeneratedValue
public Long getId() {
return id;
}
}
Run Code Online (Sandbox Code Playgroud)
社交网络
@Entity
@Table(name = "social_network")
public class SocialNetwork implements java.io.Serializable {
@Id
@GeneratedValue
public int getId() {
return id;
}
}
Run Code Online (Sandbox Code Playgroud)
SocialProfile
@Entity
@Table(name = "social_profile")
public class SocialProfile implements java.io.Serializable {
@Id
@ManyToOne
@JoinColumn(name="user_id")
public User getUser() {
return user;
}
@Id
@ManyToOne
@JoinColumn(name="social_network_id")
public SocialNetwork getSocialNetwork() {
return socialNetwork;
}
}
Run Code Online (Sandbox Code Playgroud)
显然我的代码现在无法正常工作.任何人都可以对此有所了解吗?
我读到这getOne()是懒惰加载并立即findOne()获取整个实体.我检查调试日志,我甚至能监视我的SQL服务器上看到被执行什么语句,我发现,无论getOne()和findOne()生成和执行相同的查询.但是当我使用时,getOne()这些值最初为null(当然除了id).
那么有人可以告诉我,如果两种方法在数据库上执行相同的查询,为什么我要使用一个而不是另一个?我基本上是在寻找一种获取实体的方法,而不会获得它的所有子/属性.
EDIT1:
道码:
@Repository
public interface FlightDao extends JpaRepository<Flight, Long> {
}
Run Code Online (Sandbox Code Playgroud)
EDIT2:
感谢Chlebik,我能够找出问题所在.像Chlebik所说,如果你试图访问由getOne()完整查询提取的实体的任何属性将被执行.在我的情况下,我在调试时检查行为,一次移动一行,我完全忘记了调试IDE时尝试访问对象属性以进行调试(或者至少是我认为正在发生的事情),所以调试触发器完整的查询执行.我停止调试,然后检查日志,一切似乎都正常.
getOne()vs findOne()(这个日志来自MySQL general_log而不是休眠.
我有@Service几个方法,每个方法使用不同的 web api。每个调用都应该有一个自定义的读取超时。拥有一个 RestTemplate 实例并在每个方法中通过工厂更改超时是否是线程安全的
((HttpComponentsClientHttpRequestFactory)restTemplate.getRequestFactory())
.setReadTimeout(customMillis);
Run Code Online (Sandbox Code Playgroud)
我担心的是我正在更改工厂的超时时间,它不像RequestConfig. 考虑到这些方法可能同时被多个用户调用,这种方法是否是线程安全的?或者每个方法都应该有自己的RestTemplate?
我有一个包含以下内容的csv
EANHotelID|SequenceNumber|Name|Address1|Address2|City|StateProvince|PostalCode|Country|Latitude|Longitude|AirportCode|PropertyCategory|PropertyCurrency|StarRating|Confidence|SupplierType|Location|ChainCodeID|RegionID|HighRate|LowRate|CheckInTime|CheckOutTime
541454|99999999|Hotel Maan Residency|"B" Wing, Gopal Palace, opp. ocean park|Naherunagar-Satellite Road|Ahmedabad||380 015|IN|23.02266|72.53842|AMD|1|INR|3.0||ESR|Near Kankaria Lake|||0|0|10:00 AM|10:00 AM
Run Code Online (Sandbox Code Playgroud)
现在,我尝试使用以下代码将csv中的每一行作为一个对象读取
CsvMapper mapper = new CsvMapper();
mapper.findAndRegisterModules();
File csvFile = new File("D:\\ActivePropertyList.txt.bak2");
CsvSchema schema = CsvSchema.emptySchema().withHeader().withColumnSeparator('|').withNullValue("");
MappingIterator<Map<String,String>> it = mapper.readerFor(Map.class).with(schema)
.readValues(csvFile);
while (it.hasNextValue()) {
Map<String,String> value = it.nextValue();
}
Run Code Online (Sandbox Code Playgroud)
但这是由于"B"csv中存在的原因而失败。我收到以下错误:
由以下原因引起:com.fasterxml.jackson.core.JsonParseException:意外的字符(“ W”(代码87)):预期的分隔符(““”(代码34))或行尾位于[来源:(com.fasterxml .jackson.dataformat.csv.impl.UTF8Reader);第2行,第43列]
如何正确解析csv中的双引号?我尝试玩耍,schema.withEscapeChar() schema.withQuoteChar()但无法正常工作。
我的课如下
@Component
public abstract class NotificationCenter {
protected final EmailService emailService;
protected final Logger log = LoggerFactory.getLogger(getClass());
protected NotificationCenter(EmailService emailService) {
this.emailService = emailService;
}
protected void notifyOverEmail(String email, String message) {
//do some work
emailService.send(email, message);
}
}
Run Code Online (Sandbox Code Playgroud)
EmailService是一个@Service,应通过构造函数注入自动连接。
现在,我有一个扩展的类,还NotificationCenter应该自动装配组件
@Service
public class NotificationCenterA extends NotificationCenter {
private final TemplateBuildingService templateBuildingService;
public NotificationCenterA(TemplateBuildingService templateBuildingService) {
this.templateBuildingService = templateBuildingService;
}
}
Run Code Online (Sandbox Code Playgroud)
根据上面的示例,该代码将不会编译,因为抽象类中没有默认的构造函数,NotificationCenter除非我将super(emailService);第一个语句添加到NotificationCenterA构造函数中,但是我没有的实例,emailService并且我也不想填充基数孩子们的田野。
知道解决这种情况的正确方法是什么吗?也许我应该使用场注入?
我第一次尝试执行器依赖项,我将其配置为选择加入
management.endpoints.enabled-by-default=false
management.endpoint.info.enabled=true
management.endpoint.health.enabled=true
Run Code Online (Sandbox Code Playgroud)
当我拨打/actuator/health本地电话时,大约需要 1.4 秒才能响应。请记住,这是来自服务器同一台计算机的本地调用。
如果我创建一个以空响应进行回复的常规端点,则该请求将只需要几毫秒。
这是正常的吗?我可以让它回复得更快吗?
想象一下,我有以下列表
清单a-("One", "Two", "Three", "Four", "Five")
清单b-("oNe", "two", "THREE")
我想考虑b作为a(忽略案例)的一个子集.
现在我正在使用循环和一些像这样的lambda
boolean subset = true;
for(String bWord : b) {
if(!a.stream().anyMatch(aWord -> aWord.equalsIgnoreCase(bWord))) {
subset = false;
break;
}
}
Run Code Online (Sandbox Code Playgroud)
是否有更短的方法可以用lambdas做到这一点?
spring ×5
spring-boot ×4
hibernate ×3
java ×3
jpa ×3
spring-data ×2
email ×1
email-client ×1
html ×1
html-email ×1
resttemplate ×1
smtp ×1
spring-mvc ×1